Timestamps
Response fields that carry a timestamp are typed as real datetime (or, for a plain
calendar date, date) values, not raw strings or integers. The client converts each one
from the wire format Moralis actually uses for that field -- which varies by endpoint --
so you never call datetime.fromtimestamp(...) yourself.
Wire Formats
| Wire shape | Type | Example field |
|---|---|---|
| RFC 3339 string | TimestampIso |
evm.wallet.history's block_timestamp |
| Unix milliseconds | TimestampMillis |
evm.price.token_price's blockTimestamp |
| Unix seconds | TimestampSeconds |
bitcoin.blockchain.block's blockTime/time |
| Plain calendar date | DateIso |
evm.nft.metadata.collection_metadata's created_date |
Most response timestamps are TimestampIso; the others show up where Moralis's own API
genuinely returns seconds, milliseconds, or a bare date for that particular field.
from typed_moralis import Moralis
async with Moralis.new() as client:
history = await client.evm.wallet.history(
'0xd8dA6BF26964aF9D7eed9e03E53415D37aA96045', chain='eth',
)
when = history['result'][0]['block_timestamp']
print(when.isoformat()) # a real datetime, already parsedRequest-Side Date Filters
Some endpoints' own date-range filters -- evm.wallet.history's from_date/to_date,
for example -- stay plain str | None on purpose: Moralis's docs state these accept
either a Unix-seconds string or a date string interchangeably, so there is no single
wire format to convert to or from. Pass whichever shape you have; the value is sent to
Moralis exactly as given.
from typed_moralis import Moralis
async with Moralis.new() as client:
history = await client.evm.wallet.history(
'0xd8dA6BF26964aF9D7eed9e03E53415D37aA96045',
chain='eth',
from_date='2024-01-01',
to_date='2024-02-01',
)