Core Verbs (get/list/create/update)
The polymorphic CRUD verbs that operate over every artifact type.
Source: docs/reference/verbs/core.md
core verbs
Core polymorphic verbs that operate across every artifact type. These are the canonical CRUD-and-traversal surface defined in SPEC-001 §3: every artifact answers get, list, search, create, update, link, comment, plus substrate-wide telemetry verbs such as health and activity.
Verbs in this namespace: 58
scidex.activity
# read verb
async def scidex_activity(
args: ActivityIn,
ctx: Context,
) -> ActivityOut: ...
Paginated read of the events table with optional filters.
Input fields
| Field | Type | Required |
|---|---|---|
event_type_prefix |
`string | null` |
actor_id |
`string | null` |
ref |
`string | null` |
since_id |
`integer | null` |
limit |
integer |
no |
exclude_test |
boolean |
no |
Output: ActivityOut
scidex.actor
# read verb
async def scidex_actor(
args: ActorIn,
ctx: Context,
) -> ActorOut: ...
Return aggregated activity + recent items for an actor.
Input fields
| Field | Type | Required |
|---|---|---|
actor_id |
string |
yes |
recent_limit |
integer |
no |
Output: ActorOut
scidex.appeal
# write verb
async def scidex_appeal(
args: AppealIn,
ctx: Context,
) -> AppealOut: ...
File an appeal against a moderation_decision (SPEC-068 §2.2).
Input fields
| Field | Type | Required |
|---|---|---|
decision_id |
string |
yes |
justification |
string |
yes |
evidence_refs |
`list[string] | null` |
Output: AppealOut
scidex.audit
# read verb
async def scidex_audit(
args: AuditIn,
ctx: Context,
) -> AuditOut: ...
Return recent admin/governance actions across the substrate. Public-read transparency surface.
Input fields
| Field | Type | Required |
|---|---|---|
window |
string |
no |
limit |
integer |
no |
Output: AuditOut
scidex.autocomplete
# read verb
async def scidex_autocomplete(
args: AutocompleteIn,
ctx: Context,
) -> AutocompleteOut: ...
Universal search autocomplete returning ranked completions across all artifact types (SPEC-108). Backed by a trigram + prefix index on artifact_suggest_index.
Input fields
| Field | Type | Required |
|---|---|---|
q |
string |
no |
limit |
integer |
no |
type_filters |
`list[string] | null` |
actor_recents |
boolean |
no |
Output: AutocompleteOut
scidex.balance
# read verb
async def scidex_balance(
args: BalanceIn,
ctx: Context,
) -> BalanceOut: ...
Return the actor’s current scidex_token balance + breakdown.
Input fields
| Field | Type | Required |
|---|---|---|
actor_id |
`string | null` |
Output: BalanceOut
scidex.batch
# write verb
async def scidex_batch(
args: BatchIn,
ctx: Context,
) -> BatchOut: ...
Execute a list of write ops as one logical action (SPEC-062).
Input fields
| Field | Type | Required |
|---|---|---|
operations |
list[BatchOp] |
yes |
mode |
string |
no |
idempotency_key |
`string | null` |
Output: BatchOut
scidex.capital_score
# read verb
async def scidex_capital_score(
args: CapitalScoreIn,
ctx: Context,
) -> CapitalScoreOut: ...
Return capital-weighted scores for one or more actors. Queries capital_scores_view (migration 0199) which aggregates portfolio_view per actor using Σ sqrt(inventory_value).
Input fields
| Field | Type | Required |
|---|---|---|
actor_ids |
list[string] |
yes |
Output: CapitalScoreOut
scidex.cite
# write verb
async def scidex_cite(
args: CiteIn,
ctx: Context,
) -> CiteOut: ...
Attach a PubMed citation (PMID) to an artifact via a cites link.
Input fields
| Field | Type | Required |
|---|---|---|
ref |
`Ref | string` |
paper_pmid |
string |
yes |
span |
`string | null` |
claim |
`string | null` |
Output: CiteOut
scidex.comment
# write verb
async def scidex_comment(
args: CommentIn,
ctx: Context,
) -> CommentOut: ...
Post a comment on an artifact (or reply to another comment).
Input fields
| Field | Type | Required |
|---|---|---|
ref |
`Ref | string` |
body |
string |
yes |
thread_parent |
`string | null` |
kind |
string |
no |
Output: CommentOut
scidex.comments
# read verb
async def scidex_comments(
args: CommentsIn,
ctx: Context,
) -> CommentsOut: ...
List comments on an artifact (paginated, threaded by parent_comment_id).
Input fields
| Field | Type | Required |
|---|---|---|
ref |
`Ref | string` |
limit |
integer |
no |
direction |
string |
no |
cursor |
`string | null` |
Output: CommentsOut
scidex.consensus
# read verb
async def scidex_consensus(
args: ConsensusIn,
ctx: Context,
) -> ConsensusOut: ...
Per-artifact consensus + cross-artifact actor alignment.
Input fields
| Field | Type | Required |
|---|---|---|
refs |
`list[Ref | string]` |
min_voted |
integer |
no |
top_n |
integer |
no |
Output: ConsensusOut
scidex.count
# read verb
async def scidex_count(
args: CountIn,
ctx: Context,
) -> CountOut: ...
Return COUNT(*) for (type, filter). Same filter machinery as scidex.list.
Input fields
| Field | Type | Required |
|---|---|---|
type |
string |
yes |
filter |
`dict | null` |
exclude_test |
boolean |
no |
Output: CountOut
scidex.create
# write verb
async def scidex_create(
args: CreateIn,
ctx: Context,
) -> CreateOut: ...
Create a new artifact of the given type.
Input fields
| Field | Type | Required |
|---|---|---|
type |
string |
yes |
title |
string |
yes |
content |
Content |
no |
id |
`string | null` |
idempotency_key |
`string | null` |
produced_by |
`ProducedByIn | null` |
authorship |
`AuthorshipEnvelope | null` |
override_gate_ids |
`list[string] | null` |
override_rationale |
`string | null` |
Output: CreateOut
scidex.diff
# read verb
async def scidex_diff(
args: DiffIn,
ctx: Context,
) -> DiffOut: ...
Return a structured diff between two versions of (the same) artifact.
Input fields
| Field | Type | Required |
|---|---|---|
ref_a |
`Ref | string` |
ref_b |
`Ref | string` |
text_diff |
boolean |
no |
Output: DiffOut
scidex.digest
# read verb
async def scidex_digest(
args: DigestIn,
ctx: Context,
) -> DigestOut: ...
Return a curated digest across content, contributors, markets, funding, and dividends. Cached 30 minutes in-process per (window, limit_per_section).
Input fields
| Field | Type | Required |
|---|---|---|
window |
string |
no |
limit_per_section |
integer |
no |
Output: DigestOut
scidex.domain
# read verb
async def scidex_domain(
args: DomainIn,
ctx: Context,
) -> DomainOut: ...
Return the full per-domain dossier.
Input fields
| Field | Type | Required |
|---|---|---|
name |
string |
yes |
top_n |
integer |
no |
Output: DomainOut
scidex.domains
# read verb
async def scidex_domains(
args: DomainsIn,
ctx: Context,
) -> DomainsOut: ...
Return active domains with per-domain activity counts.
Input fields
| Field | Type | Required |
|---|---|---|
limit |
integer |
no |
direction |
string |
no |
min_n |
integer |
no |
exclude_test |
boolean |
no |
Output: DomainsOut
scidex.evidence_graph
# read verb
async def scidex_evidence_graph(
args: EvidenceGraphIn,
ctx: Context,
) -> EvidenceGraphOut: ...
Categorize an artifact’s evidence neighborhood by polarity.
Input fields
| Field | Type | Required |
|---|---|---|
ref |
`Ref | string` |
max_depth |
integer |
no |
max_per_bucket |
integer |
no |
Output: EvidenceGraphOut
scidex.faucet
# write verb
async def scidex_faucet(
args: FaucetIn,
ctx: Context,
) -> FaucetOut: ...
Grant initial scidex_tokens to an actor (idempotent).
Input fields
| Field | Type | Required |
|---|---|---|
actor_id |
`string | null` |
Output: FaucetOut
scidex.flag
# write verb
async def scidex_flag(
args: FlagIn,
ctx: Context,
) -> FlagOut: ...
Flag an artifact for moderator review (SPEC-068 §2.2).
Input fields
| Field | Type | Required |
|---|---|---|
target_ref |
`Ref | string` |
reason_code |
string |
yes |
evidence |
`string | null` |
evidence_refs |
`list[string] | null` |
Output: FlagOut
scidex.fund_coalition
# read verb
async def scidex_fund_coalition(
args: FundCoalitionIn,
ctx: Context,
) -> FundCoalitionOut: ...
Analyze fund concentration + coalition across a set of artifacts.
Input fields
| Field | Type | Required |
|---|---|---|
refs |
`list[Ref | string]` |
min_funded |
integer |
no |
top_n |
integer |
no |
Output: FundCoalitionOut
scidex.get
# read verb
async def scidex_get(
args: GetIn,
ctx: Context,
) -> GetOut: ...
Return the full envelope for the artifact at the given ref.
Input fields
| Field | Type | Required |
|---|---|---|
ref |
`Ref | string` |
include_content |
boolean |
no |
include_links |
boolean |
no |
include_signals |
boolean |
no |
include_provenance |
boolean |
no |
Output: GetOut
scidex.health
# read verb
async def scidex_health(
args: HealthIn,
ctx: Context,
) -> HealthOut: ...
Substrate liveness + dividend queue snapshot.
Input fields: none
Output: HealthOut
scidex.history
# read verb
async def scidex_history(
args: HistoryIn,
ctx: Context,
) -> HistoryOut: ...
Return past versions (newest-first) of the artifact at ref.
Input fields
| Field | Type | Required |
|---|---|---|
ref |
`Ref | string` |
limit |
integer |
no |
Output: HistoryOut
scidex.leaderboard
# read verb
async def scidex_leaderboard(
args: LeaderboardIn,
ctx: Context,
) -> LeaderboardOut: ...
Rank artifacts of type by aggregated kind signal.
Input fields
| Field | Type | Required |
|---|---|---|
type |
string |
yes |
kind |
string |
no |
dimension |
`string | null` |
limit |
integer |
no |
direction |
string |
no |
min_n |
integer |
no |
exclude_test |
boolean |
no |
Output: LeaderboardOut
scidex.lineage
# read verb
async def scidex_lineage(
args: LineageIn,
ctx: Context,
) -> LineageOut: ...
Walk the supersession chain forward + backward from an artifact.
Input fields
| Field | Type | Required |
|---|---|---|
ref |
`Ref | string` |
max_depth |
integer |
no |
Output: LineageOut
scidex.link
# write verb
async def scidex_link(
args: LinkIn,
ctx: Context,
) -> LinkOut: ...
Create a typed edge between two artifacts (predicate-based graph link).
Input fields
| Field | Type | Required |
|---|---|---|
from |
`Ref | string` |
predicate |
string |
yes |
to |
`Ref | string` |
evidence |
`dict | null` |
strength |
number |
no |
Output: LinkOut
scidex.links
# read verb
async def scidex_links(
args: LinksIn,
ctx: Context,
) -> LinksResp: ...
Return outgoing and/or incoming edges for an artifact. Reads from THREE surfaces: • artifact_links — v1 application-layer (CHECK constrains predicates) • edges (kind=‘knowledge’) — v1 KG edges via the SPEC-072 unified table (PR #483 Phase A backfill) • substrate_artifact_links — v2-side predicates v1 rejects (replicates / addresses_gap / synthesizes / refutes / ...)
Input fields
| Field | Type | Required |
|---|---|---|
ref |
`Ref | string` |
direction |
string |
no |
predicates |
`list[string] | null` |
limit |
integer |
no |
Output: LinksResp
scidex.list
# read verb
async def scidex_list(
args: ListIn,
ctx: Context,
) -> ListOut: ...
Return a paginated list of artifacts of the requested type.
Input fields
| Field | Type | Required |
|---|---|---|
type |
string |
yes |
filter |
`dict | null` |
sort |
`list[list[Any]] | null` |
limit |
integer |
no |
cursor |
`string | null` |
exclude_test |
boolean |
no |
include_all_lifecycle |
boolean |
no |
include_withdrawn |
boolean |
no |
Output: ListOut
scidex.mr_ingest
# write verb
async def scidex_mr_ingest(
args: MRIngInput,
ctx: Context,
) -> MRIngResult: ...
Ingest Mendelian randomization summaries from OpenGWAS/IEU-MR and emit causal_link artifact rows with extraction_method=‘mr_summary’. For each GWAS study, writes a causal_link with cause_ref=study:, effect_ref=phenotype:<slugified_trait>, and study metadata in source_papers.
Input fields
| Field | Type | Required |
|---|---|---|
phenotype_query |
string |
yes |
limit |
integer |
no |
dry_run |
boolean |
no |
Output: MRIngResult
scidex.notifications
# read verb
async def scidex_notifications(
args: NotificationsIn,
ctx: Context,
) -> NotificationsOut: ...
List events relevant to an actor (paginated; cursor-based).
Input fields
| Field | Type | Required |
|---|---|---|
actor_id |
string |
yes |
since |
`integer | null` |
limit |
integer |
no |
types |
`list[string] | null` |
unread_only |
boolean |
no |
include_unread_count |
boolean |
no |
Output: NotificationsOut
scidex.poll
# read verb
async def scidex_poll(
args: PollIn,
ctx: Context,
) -> PollOut: ...
Return up to limit events newer than the cursor. Long-poll mode (when topics is set): block up to timeout_seconds for the next matching event rather than returning immediately from the DB snapshot.
Input fields
| Field | Type | Required |
|---|---|---|
consumer_id |
`string | null` |
types |
`list[string] | null` |
topics |
`list[string] | null` |
since_event_id |
`string | null` |
timeout_seconds |
integer |
no |
filter |
`dict | null` |
artifact_type |
`list[string] | null` |
actor |
`list[string] | null` |
verb |
`list[string] | null` |
since |
`integer | null` |
limit |
integer |
no |
auto_advance |
boolean |
no |
Output: PollOut
scidex.portfolio
# read verb
async def scidex_portfolio(
args: PortfolioIn,
ctx: Context,
) -> PortfolioOut: ...
Return a single actor’s portfolio view aggregation.
Input fields
| Field | Type | Required |
|---|---|---|
actor_id |
`string | null` |
market_type |
`string | null` |
include_history |
boolean |
no |
limit |
integer |
no |
Output: PortfolioOut
scidex.predicates
# read verb
async def scidex_predicates(
args: PredicatesIn,
ctx: Context,
) -> PredicatesOut: ...
Return the curated list of known link predicates.
Input fields
| Field | Type | Required |
|---|---|---|
spec |
`string | null` |
Output: PredicatesOut
scidex.preregister
# write verb
async def scidex_preregister(
args: PreregisterIn,
ctx: Context,
) -> PreregisterOut: ...
Create a new preregistration artifact. The artifact is created in the substrate and a corresponding preregistrations table row is written with the extended fields.
Input fields
| Field | Type | Required |
|---|---|---|
title |
string |
yes |
predicted_findings |
Predicted Findings |
yes |
target_hypothesis_ref |
string |
yes |
target_analysis_ref |
`string | null` |
prediction_probability |
`number | null` |
methods_locked |
boolean |
no |
id |
`string | null` |
Output: PreregisterOut
scidex.propose
# write verb
async def scidex_propose(
args: ProposeIn,
ctx: Context,
) -> ProposeOut: ...
Create a proposal artifact of the given kind. Dispatches to scidex.create for the actual write.
Input fields
| Field | Type | Required |
|---|---|---|
kind |
string |
yes |
payload |
Payload |
yes |
source_refs |
list[string] |
no |
title |
string |
yes |
idem_key |
`string | null` |
Output: ProposeOut
scidex.react
# write verb
async def scidex_react(
args: ReactIn,
ctx: Context,
) -> ReactOut: ...
Toggle an emoji reaction on any artifact (SPEC-109 §3.4).
Input fields
| Field | Type | Required |
|---|---|---|
ref |
`Ref | string` |
emoji |
string |
yes |
Output: ReactOut
scidex.replicate
# write verb
async def scidex_replicate(
args: ReplicateIn,
ctx: Context,
) -> ReplicateOut: ...
Emit a replication_event for a claim. Creates a ‘confirms’ or ‘contradicts’ replication event and updates the claim’s replication_status via the replication_status_transition_validator.
Input fields
| Field | Type | Required |
|---|---|---|
claim_ref |
string |
yes |
confirms_or_contradicts |
string |
yes |
source_ref |
string |
yes |
extraction_method |
`string | null` |
Output: ReplicateOut
scidex.schema
# read verb
async def scidex_schema(
args: SchemaIn,
ctx: Context,
) -> SchemaOut: ...
Return registered schema(s) for artifact type(s). Reads from the schema_registry table; falls back to bundled JSON files if the table is missing (dev / first-boot).
Input fields
| Field | Type | Required |
|---|---|---|
type |
`string | null` |
version |
`integer | null` |
only_current |
boolean |
no |
Output: SchemaOut
scidex.score
# read verb
async def scidex_score(
args: ScoreIn,
ctx: Context,
) -> ScoreOut: ...
Return a normalized composite score for one artifact. Read-through cache (substrate_score_cache, migration 0006): • Cache hits when (ref_type, ref_id, strategy_key) matches AND the cached signal_count equals the current count • A trigger on artifact_signals invalidates by DELETE; this verb recomputes + UPSERTs on miss.
Input fields
| Field | Type | Required |
|---|---|---|
ref |
`Ref | string` |
strategy |
string |
no |
weights |
`dict | null` |
fund_pivot |
number |
no |
usage_pivot |
number |
no |
Output: ScoreOut
scidex.search
# read verb
async def scidex_search(
args: SearchIn,
ctx: Context,
) -> SearchOut: ...
Full-text + structured + semantic + hybrid search across artifacts.
Input fields
| Field | Type | Required |
|---|---|---|
query |
`string | null` |
types |
`list[string] | null` |
filter |
`dict | null` |
mode |
string |
no |
limit |
integer |
no |
cursor |
`string | null` |
rerank |
boolean |
no |
highlight |
boolean |
no |
include_all_lifecycle |
boolean |
no |
include_withdrawn |
boolean |
no |
Output: SearchOut
scidex.signal
# write verb
async def scidex_signal(
args: SignalIn,
ctx: Context,
) -> SignalOut: ...
Append a signal row. Aggregation is per-kind (replace/sum/append) — see SPEC-001 §10.1.
Input fields
| Field | Type | Required |
|---|---|---|
ref |
`Ref | string` |
kind |
string |
no |
dimension |
`string | null` |
value |
number |
yes |
weight |
number |
no |
unit |
`string | null` |
reason |
`string | null` |
metadata |
`dict | null` |
Output: SignalOut
scidex.signals
# read verb
async def scidex_signals(
args: SignalsIn,
ctx: Context,
) -> SignalsOut: ...
Return aggregated signals for the artifact.
Input fields
| Field | Type | Required |
|---|---|---|
ref |
`Ref | string` |
kinds |
`list[string] | null` |
since |
`string | null` |
Output: SignalsOut
scidex.stats
# read verb
async def scidex_stats(
args: StatsIn,
ctx: Context,
) -> StatsOut: ...
Substrate-wide aggregate counts (artifacts, signals, comments, actors).
Input fields
| Field | Type | Required |
|---|---|---|
active_actor_window_days |
integer |
no |
Output: StatsOut
scidex.subscribe
# write verb
async def scidex_subscribe(
args: SubscribeIn,
ctx: Context,
) -> SubscribeOut: ...
Subscribe an actor to a target with a notification mode (SPEC-109 §3.4). Idempotent on (actor_id, target_kind, target_value): re-subscribing with a different mode updates the stored mode rather than inserting a duplicate.
Input fields
| Field | Type | Required |
|---|---|---|
target_kind |
string |
yes |
target_value |
string |
yes |
actor_id |
`string | null` |
mode |
string |
no |
Output: SubscribeOut
scidex.subscribers
# read verb
async def scidex_subscribers(
args: SubscribersIn,
ctx: Context,
) -> SubscribersOut: ...
List actors who’ve subscribed to the given target. Reverse-lookup of scidex.subscriptions: given a target_kind + target_value, returns the actors following it.
Input fields
| Field | Type | Required |
|---|---|---|
target_kind |
string |
yes |
target_value |
string |
yes |
limit |
integer |
no |
Output: SubscribersOut
scidex.subscriptions
# read verb
async def scidex_subscriptions(
args: SubscriptionsIn,
ctx: Context,
) -> SubscriptionsOut: ...
List an actor’s current subscriptions, newest first.
Input fields
| Field | Type | Required |
|---|---|---|
actor_id |
`string | null` |
target_kind |
`string | null` |
limit |
integer |
no |
Output: SubscriptionsOut
scidex.suggest
# read verb
async def scidex_suggest(
args: SuggestIn,
ctx: Context,
) -> SuggestOut: ...
Return personalized opportunities ranked for the actor.
Input fields
| Field | Type | Required |
|---|---|---|
actor_id |
`string | null` |
limit |
integer |
no |
kinds |
`list[string] | null` |
min_calibration |
number |
no |
Output: SuggestOut
scidex.supersede
# write verb
async def scidex_supersede(
args: SupersedeIn,
ctx: Context,
) -> SupersedeOut: ...
Mark an artifact as superseded (optionally by a replacement artifact).
Input fields
| Field | Type | Required |
|---|---|---|
ref |
`Ref | string` |
replacement |
`Ref | string |
reason |
string |
yes |
reason_code |
`string | null` |
Output: SupersedeOut
scidex.trending
# read verb
async def scidex_trending(
args: TrendingIn,
ctx: Context,
) -> TrendingOut: ...
Rank type artifacts by score change over the last window.
Input fields
| Field | Type | Required |
|---|---|---|
type |
string |
yes |
kind |
string |
no |
dimension |
`string | null` |
window_hours |
number |
no |
limit |
integer |
no |
direction |
string |
no |
min_signals_in_window |
integer |
no |
actor_id |
`string | null` |
exclude_test |
boolean |
no |
include_orphan_refs |
boolean |
no |
Output: TrendingOut
scidex.types
# read verb
async def scidex_types(
args: TypesIn,
ctx: Context,
) -> TypesOut: ...
Return a catalog of registered artifact types + their schemas.
Input fields
| Field | Type | Required |
|---|---|---|
types |
`list[string] | null` |
include_schema |
boolean |
no |
Output: TypesOut
scidex.unlink
# write verb
async def scidex_unlink(
args: UnlinkIn,
ctx: Context,
) -> UnlinkOut: ...
Remove a typed edge between two artifacts. Idempotent: if the edge does not exist, returns deleted=False.
Input fields
| Field | Type | Required |
|---|---|---|
from |
`Ref | string` |
predicate |
string |
yes |
to |
`Ref | string` |
Output: UnlinkOut
scidex.unsubscribe
# write verb
async def scidex_unsubscribe(
args: UnsubscribeIn,
ctx: Context,
) -> UnsubscribeOut: ...
Remove a subscription. No-op if not subscribed.
Input fields
| Field | Type | Required |
|---|---|---|
target_kind |
string |
yes |
target_value |
string |
yes |
actor_id |
`string | null` |
Output: UnsubscribeOut
scidex.update
# write verb
async def scidex_update(
args: UpdateIn,
ctx: Context,
) -> UpdateOut: ...
Update mutable fields on an existing artifact (handler-validated).
Input fields
| Field | Type | Required |
|---|---|---|
type |
string |
yes |
id |
string |
yes |
patch |
Patch |
yes |
base_content_hash |
`string | null` |
idempotency_key |
`string | null` |
Output: UpdateOut
scidex.usage
# read verb
async def scidex_usage(
args: UsageIn,
ctx: Context,
) -> UsageOut: ...
Read: current rate-limit, quota, and budget state for an actor.
Input fields
| Field | Type | Required |
|---|---|---|
actor_id |
`string | null` |
scopes |
`list[string] | null` |
Output: UsageOut
scidex.verbs
# read verb
async def scidex_verbs(
args: VerbsIn,
ctx: Context,
) -> VerbsOut: ...
Return the substrate’s verb catalog with input/output schemas.
Input fields
| Field | Type | Required |
|---|---|---|
name_prefix |
`string | null` |
include_schemas |
boolean |
no |
Output: VerbsOut
scidex.vote
# write verb
async def scidex_vote(
args: VoteIn,
ctx: Context,
) -> VoteOut: ...
Cast or retract a vote on an artifact. Auth required.
Input fields
| Field | Type | Required |
|---|---|---|
artifact_id |
string |
yes |
direction |
string |
yes |
weight |
number |
no |
outcome_threshold |
`integer | null` |
Output: VoteOut