Skip to main content

SentiMove

Python client for SentiMove intelligence reports. One report includes an asset's events and overall analysis for an inclusive 25-block period and costs one Yototec credit. The full current 15-asset overview costs 15 credits. Account, ticker and report-availability reads are free.

Installation and account

python -m pip install git+https://github.com/Yototec/sentimove-sdk.git

Connect your Ethereum-compatible wallet at Yototec Credits to initialize your permanent API key and one-time 1,000-credit grant. Reconnecting reuses the same key and balance. For additional credits, email info@yototec.com with your needs.

Keep the key in a secret store or environment variable. Every SDK request sends it in Authorization: Bearer; it never appears in the URL. Previous SentiChain credentials are retired. Website wallet sessions and SDK access use the same account balance.

Buy one complete report

import os
from sentimove import SentiMoveClient

with SentiMoveClient(api_key=os.environ["YOTOTEC_API_KEY"]) as client:
    account = client.get_account()  # Free, also available at zero credits.
    print(account.credits, account.available_credits)

    # Free discovery provides windows, revision, readiness, limitations and price.
    metadata = client.list_report_metadata(tickers=["BTC"], limit=1)
    if metadata:
        item = metadata[0]
        report = client.get_report("BTC", item["chunk_start"], item["chunk_end"])
        for event in report.events:
            print(event.timestamp, event.type, event.sentiment, event.summary)
        print(report.signal.direction, report.signal.confidence, report.signal.rationale)
        print(report.report_status, report.limitations, report.report_revision)
        print(report.billing.credits_charged, report.billing.credits_remaining)

get_report() makes one purchase. Accessing report.events and report.signal makes no further requests. Calling get_report() again intentionally buys the report again, even when its revision is unchanged. Compare free metadata against the last window/revision you consumed before buying new content.

A useful limited report has report_status="limited" and explains its limitations. Its signal may have direction=None and confidence=None while retaining substantive analysis, categories and patterns. The SDK preserves those null values. A ready signal uses LONG, SHORT or FLAT, with numerical confidence from 0 to 1. Unavailable reports raise an error without returning report content or charging credits.

Full overview

snapshot = client.get_latest_snapshot()
print(snapshot.chunk_start, snapshot.chunk_end)
print(snapshot.billing.credits_charged, snapshot.billing.credits_remaining)
for report in snapshot.assets:
    print(report.ticker, report.signal.rationale)

Run this while the client is open. A snapshot includes all active assets in one coherent period, including useful limited reports. Billing is on snapshot.billing; individual snapshot assets have billing=None. An unavailable asset or insufficient balance rejects the entire purchase without content or debit. For example, a 15-asset purchase with 14 credits leaves all 14 credits available. Use free metadata to identify a smaller available report to request individually.

Retries and errors

Each get_report() or get_latest_snapshot() call creates one UUID in Idempotency-Key. Connection failures and timeouts retry at most twice by default, reusing that UUID and the same request. HTTP errors are returned immediately. A later intentional purchase receives a new UUID.

You can explicitly supply operation_id to resume the same purchase after an uncertain transport outcome. Keep its exact ticker/window or snapshot request. Reusing that ID for different resources is a conflict. Latest-snapshot retries remain bound to the original operation's frozen period, even if a newer period becomes available.

from uuid import uuid4
from sentimove import APIError, AuthenticationError, InsufficientCreditsError

operation_id = str(uuid4())  # Persist alongside the exact requested resource.
try:
    report = client.get_report("BTC", 130175, 130199, operation_id=operation_id)
except InsufficientCreditsError as exc:
    print(exc.required_credits, exc.available_credits)  # Integers; no purchase occurred.
except AuthenticationError:
    print("Check your Yototec API key.")
except APIError as exc:
    # Retain this ID for recovery; do not automatically start another purchase.
    print(exc.status_code, exc.code, exc.operation_id)

Successful paid results expose Billing(credits_charged: int, credits_remaining: int, operation_id: str) parsed from X-Yototec-Credits-Charged, X-Yototec-Credits-Remaining and X-Yototec-Operation-Id. Invalid report or billing responses raise APIError(code="invalid_response"); validated billing is retained on exc.billing when available. Transport errors use code="transport_error". Keys and raw transport exception messages are excluded from SDK errors.

API reference

SentiMoveClient(api_key, base_url="https://api.sentimove.com", timeout=30.0, transport_retries=2) supports context-manager use and close(). Timeouts are positive seconds; transport_retries is an integer from 0 to 5. Redirects are rejected to keep credentials at the configured endpoint.

Method HTTP request Result / price
get_report(ticker, chunk_start, chunk_end, *, operation_id=None) GET /agent/report?ticker=BTC&chunk_start=130175&chunk_end=130199 Report; 1 credit
get_latest_snapshot(*, operation_id=None) GET /agent/latest_snapshot Snapshot; 1 credit per asset
list_report_metadata(tickers=None, *, before_chunk=None, limit=100) GET /agent/report_metadata?tickers=BTC,ETH&before_chunk=130200&limit=100 List of metadata dictionaries; free
get_account() GET /yototec/account Account(wallet, credits, available_credits); free
list_tickers() GET /agent/tickers List of active identifiers; free

Ticker symbols are normalized to uppercase. Report windows must begin at a multiple of 25 and end 24 blocks later. Metadata accepts 1 to 100 rows; omit tickers for all active assets. before_chunk filters prior windows. Metadata never includes event text, signals or embeddings.

Report contains ticker, chunk boundaries, status, limitations, opaque revision, events, signal and optional billing. Each event retains timestamp, type, sentiment and summary. Signal retains direction, confidence, rationale, category summaries and Pattern entries with keywords, event indices and descriptions.

Updating existing integrations

This release replaces public component reads and old credentials. Replace get_events(ticker) and get_signal(ticker) with a single get_report() followed by local report.events and report.signal access. The separate component methods, ticker-request method and former package aliases are removed. Enroll a Yototec account and configure its API key before using the client.

The service uses https://api.sentimove.com; configured API host aliases enforce the same access policy. The SDK does not provide live asset-header prices.

Verify locally without production accounts or charges:

python -m unittest discover -s tests -v
python -m build

The contract tests use a local HTTP server and isolated test-only credentials and balances.

MIT License. See LICENSE.

Metadata

Release files for sentimove 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sentimove 2.0.0
File Size Uploaded Provenance
sentimove-2.0.0.tar.gz 16.6 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for sentimove 2.0.0
File Interpreter ABI Platform
sentimove-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 28.2 kB

Release files / sentimove-2.0.0.tar.gz

Download URL sentimove-2.0.0.tar.gz
Size 16.6 kB
Tags Source
SHA-256 checksum
How to use checksums
ca5660c05e8e8f216904e4217fb1e35a5999caab45fa37fc74e40115c76e0011
BLAKE2b-256 checksum
How to use checksums
db44e0de4b6afeeb1f3cc8edd31f8cbd422352096e81db3b64ee4872d3800dd7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / sentimove-2.0.0-py3-none-any.whl

Download URL sentimove-2.0.0-py3-none-any.whl
Size 11.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0bd53baa256c4644b5c85e72216fbf3677ac1d89e4bbbd7677ba2d5ab9b1e463
BLAKE2b-256 checksum
How to use checksums
0b1ee45bee71baf2487cf73366e440556ca8fdd41199c12e8ad21c7fb5536fd9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Security for sentimove 2.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for sentimove-2.0.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page