Skip to main content
API reference sections

Schema

PersonalAttributeValue

A typed personal attribute value.

The three temporal types are three variants, and none of them is "an instant with an optional zone" ([ADR-183]). The meaning is carried by which variant it is, never by whether a field happens to be filled in, so there is no reading of a stored value that could go two ways.

[ADR-183]: ../../../docs/decisions/ADR-201-225.md#adr-206-timemodel--koru-has-three-temporal-types-not-one-with-a-nullable-timezone

Type object or object or object or object or object or object

Shape

One of 6 shapes:

  1. type: "text"

    Free text.

    FieldTypeDescription
    textrequiredstring
    typerequired"text"
  2. type: "number"

    A finite number.

    FieldTypeDescription
    numberrequirednumber (double)
    typerequired"number"
  3. type: "bool"

    A boolean. Stored only when set - "false" is a value, "unset" is an absent key.

    FieldTypeDescription
    valuerequiredboolean
    typerequired"bool"
  4. type: "date"

    A calendar date, YYYY-MM-DD. Deliberately not an instant: it names a day, the same day in every timezone.

    FieldTypeDescription
    daterequiredstring
    typerequired"date"
  5. type: "datetime_floating"

    A wall-clock date and time with no zone, YYYY-MM-DDTHH:MM:SS.

    The normal shape for a personal timed value, and why it is: koru.plan answers when do I intend to work on this, and 09:00 means 09:00 wherever the person wakes up. Pinning it to the zone they were sitting in when they typed it would make a plan move overnight on a flight - a decision nobody made.

    There is no tz field, so nothing can half-fill one.

    FieldTypeDescription
    wallrequiredstring
    typerequired"datetime_floating"
  6. type: "datetime_zoned"

    An instant in epoch milliseconds UTC plus the IANA zone it was meant in (America/New_York) - a name rather than an offset, because daylight-saving rules change what a future offset will be.

    The zone is not optional: a personal value that is genuinely tied to a place says which, and one that is not is [DatetimeFloating](Self::DatetimeFloating) instead.

    FieldTypeDescription
    msrequiredinteger (int64)
    tzrequiredstring
    typerequired"datetime_zoned"
Example
{
  "text": "string",
  "type": "text"
}

The contract has no example values, so example bodies are generated from each schema: every field is shown with a placeholder of its type.

Generated from contract version 1. Last updated .

Privacy choices

Choose which optional tools Koru may use on this site. Your choice is saved in a cookie in this browser for 12 months. Privacy policy

Privacy choices

Keep you signed in, protect forms and remember your language and this choice.

Always on

PostHog and Google Analytics 4 measure page views and actions such as downloads, using cookies or local storage.

PostHog records how pages are used, with form inputs masked and private pages excluded. Needs Analytics.

Ahrefs Web Analytics measures visits and where they come from, and Google Ads measures whether our ads led to a visit or download.