Skip to content
bucker

API reference

behavioral-fingerprint

3 operations. Shapes are sketches of the declared schemas, bounded in depth — the authoritative document is linked from the index.

POST/orgs/{orgSlug}/behavioral-fingerprint/evaluate

Requires bearerAuth

Parameters

Parameters for POST /orgs/{orgSlug}/behavioral-fingerprint/evaluate
NameInTypeNotes
orgSlugrequiredpathstringmin length 1

Request body (required) · application/json

{
  sampleLimit?: integer
  sampleSeed?: string
  maxExecutions?: integer
  maxCostMicros?: integer
  costPerExecutionMicros?: integer
  embeddingModel?: string
  useCache?: boolean
  spend?: {
    agentId: string
    onBehalfOfUserId?: string | null
    incidentId?: string | null
  }
}

Response 200

{
  evaluationId: string
  report: {
    version: string
    orgId: string
    projectIds: string[]
    embeddingModel: string | null
    decidedPairs: integer
    sampledPairs: integer
    comparablePairs: integer
    comparableConfirmed: integer
    comparableRejected: integer
    notComparable: {
      reason: "NO_MINIMIZED_REPRO" | "EXECUTOR_INCONCLUSIVE" | "BUDGET_EXHAUSTED" | "ISSUE_MISSING" | "SELF_PAIR"
      count: integer
    }[]
    coverage: number | null
    repro: {
      truePositives: integer
      falsePositives: integer
      trueNegatives: integer
      falseNegatives: integer
      precision: number | null
      precisionLowerBound: number
      recall: number | null
      accuracy: number | null
    }
    embedding: {
      curve: object[]
      matchedRecallPoint: object | null
      atDefaultThreshold: object | null
    }
    precisionDelta: number | null
    pairedTest: {
      reproOnlyCorrect: integer
      embeddingOnlyCorrect: integer
      discordant: integer
      pValue: number
      significant: boolean
      method: "MCNEMAR_EXACT_BINOMIAL"
    } | null
    verdict: "INSUFFICIENT_DATA" | "NO_MEASURABLE_DIFFERENCE" | "REPRO_EQUIVALENCE_BETTER" | "EMBEDDING_BETTER"
    disclosures: string[]
    blockedBecause: string[]
    cost: {
      executions: integer
      cacheHits: integer
      costMicros: integer
      costPerComparisonMicros: integer | null
      projectedFullCorpusCostMicros: integer | null
      executorProvider: string
    }
    sample: {
      seed: string
      limit: integer
      deterministic: true
    }
    measuredAt: string
  }
}

Response 400 · `bad_request` — the path, query or body failed validation. `details` carries the Zod issues, one per offending field.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Response 401 · `unauthorized` — no credential, or one that is expired, revoked or not valid for this resource. `mfa_required` when the credential is good but a second factor is owed.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Response 403 · `forbidden` — the credential is valid and its scopes or this principal’s membership do not reach this resource. Scopes are re-intersected with live memberships on every request, so this can appear for a token that worked yesterday.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Response 404 · `not_found` — no such resource, OR one this principal cannot see. The two are deliberately one answer: a 403 would confirm the existence of something whose identifier is guessable.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Response 429 · `rate_limited` or `quota_exceeded` — over a ceiling. `Retry-After` says when to come back, and `x-ratelimit-limit` / `-remaining` / `-reset` describe the bucket.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Response 500 · `internal_error` — an unhandled failure on this side. The message is always generic; `requestId` is the part worth quoting.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Request

curl -X POST https://api.bucker.io/orgs/{orgSlug}/behavioral-fingerprint/evaluate \
  -H 'authorization: Bearer $BUCKER_TOKEN' \
  -H 'content-type: application/json' \
  -d '{ … }'

GET/orgs/{orgSlug}/behavioral-fingerprint/evaluations

Requires bearerAuth

Parameters

Parameters for GET /orgs/{orgSlug}/behavioral-fingerprint/evaluations
NameInTypeNotes
orgSlugrequiredpathstringmin length 1
limitqueryintegerdefault 20, min 1, max 100

Response 200

{
  data: {
    id: string
    verdict: string
    decidedPairs: integer
    sampledPairs: integer
    comparablePairs: integer
    executions: integer
    cacheHits: integer
    costMicros: integer
    createdAt: string
  }[]
}

Response 400 · `bad_request` — the path, query or body failed validation. `details` carries the Zod issues, one per offending field.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Response 401 · `unauthorized` — no credential, or one that is expired, revoked or not valid for this resource. `mfa_required` when the credential is good but a second factor is owed.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Response 403 · `forbidden` — the credential is valid and its scopes or this principal’s membership do not reach this resource. Scopes are re-intersected with live memberships on every request, so this can appear for a token that worked yesterday.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Response 404 · `not_found` — no such resource, OR one this principal cannot see. The two are deliberately one answer: a 403 would confirm the existence of something whose identifier is guessable.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Response 429 · `rate_limited` or `quota_exceeded` — over a ceiling. `Retry-After` says when to come back, and `x-ratelimit-limit` / `-remaining` / `-reset` describe the bucket.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Response 500 · `internal_error` — an unhandled failure on this side. The message is always generic; `requestId` is the part worth quoting.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Request

curl https://api.bucker.io/orgs/{orgSlug}/behavioral-fingerprint/evaluations \
  -H 'authorization: Bearer $BUCKER_TOKEN'

GET/orgs/{orgSlug}/behavioral-fingerprint/evaluations/{evaluationId}

Requires bearerAuth

Parameters

Parameters for GET /orgs/{orgSlug}/behavioral-fingerprint/evaluations/{evaluationId}
NameInTypeNotes
orgSlugrequiredpathstringmin length 1
evaluationIdrequiredpathstringmin length 1

Response 200

{
  id: string
  createdAt: string
  report: {
    version: string
    orgId: string
    projectIds: string[]
    embeddingModel: string | null
    decidedPairs: integer
    sampledPairs: integer
    comparablePairs: integer
    comparableConfirmed: integer
    comparableRejected: integer
    notComparable: {
      reason: "NO_MINIMIZED_REPRO" | "EXECUTOR_INCONCLUSIVE" | "BUDGET_EXHAUSTED" | "ISSUE_MISSING" | "SELF_PAIR"
      count: integer
    }[]
    coverage: number | null
    repro: {
      truePositives: integer
      falsePositives: integer
      trueNegatives: integer
      falseNegatives: integer
      precision: number | null
      precisionLowerBound: number
      recall: number | null
      accuracy: number | null
    }
    embedding: {
      curve: object[]
      matchedRecallPoint: object | null
      atDefaultThreshold: object | null
    }
    precisionDelta: number | null
    pairedTest: {
      reproOnlyCorrect: integer
      embeddingOnlyCorrect: integer
      discordant: integer
      pValue: number
      significant: boolean
      method: "MCNEMAR_EXACT_BINOMIAL"
    } | null
    verdict: "INSUFFICIENT_DATA" | "NO_MEASURABLE_DIFFERENCE" | "REPRO_EQUIVALENCE_BETTER" | "EMBEDDING_BETTER"
    disclosures: string[]
    blockedBecause: string[]
    cost: {
      executions: integer
      cacheHits: integer
      costMicros: integer
      costPerComparisonMicros: integer | null
      projectedFullCorpusCostMicros: integer | null
      executorProvider: string
    }
    sample: {
      seed: string
      limit: integer
      deterministic: true
    }
    measuredAt: string
  }
}

Response 400 · `bad_request` — the path, query or body failed validation. `details` carries the Zod issues, one per offending field.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Response 401 · `unauthorized` — no credential, or one that is expired, revoked or not valid for this resource. `mfa_required` when the credential is good but a second factor is owed.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Response 403 · `forbidden` — the credential is valid and its scopes or this principal’s membership do not reach this resource. Scopes are re-intersected with live memberships on every request, so this can appear for a token that worked yesterday.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Response 404 · `not_found` — no such resource, OR one this principal cannot see. The two are deliberately one answer: a 403 would confirm the existence of something whose identifier is guessable.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Response 429 · `rate_limited` or `quota_exceeded` — over a ceiling. `Retry-After` says when to come back, and `x-ratelimit-limit` / `-remaining` / `-reset` describe the bucket.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Response 500 · `internal_error` — an unhandled failure on this side. The message is always generic; `requestId` is the part worth quoting.

{
  error: {
    code: "bad_request" | "conflict" | "forbidden" | "internal_error" | "mfa_required" | "not_found" | "payload_too_large" | "quota_exceeded" | … 6 more
    message: string
    details?: unknown
    requestId?: string
  }
}

Request

curl https://api.bucker.io/orgs/{orgSlug}/behavioral-fingerprint/evaluations/{evaluationId} \
  -H 'authorization: Bearer $BUCKER_TOKEN'