# Automations

Create and configure automations, revisions, schedules, triggers, and connections.

## GET /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations/{automation\_id}

> Get Automation

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1Automation":{"type":"object","properties":{"name":{"type":"string","title":"The automation name (e.g. 'automations/{automation}')"},"display_name":{"type":"string","description":"Human-readable name of the automation for identification and display.\nMust be unique within the user's namespace."},"english_code":{"type":"string","description":"User-facing English description code that explains what the automation does.\nThis is a human-readable representation of the automation's purpose and logic."},"code":{"type":"string","description":"SPy (Subset-of Python) executable code that defines the automation logic.\nThis code is executed when the automation is invoked with inputs."},"artifacts":{"type":"object","additionalProperties":{"type":"string","format":"byte"},"description":"Additional artifacts associated with the automation (e.g., data files, configurations).\nKeys are artifact names, values are the binary content of the artifacts.\nThese artifacts are available to the automation during execution."},"create_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was originally created.\nThis value never changes after creation.","readOnly":true},"version":{"type":"string","title":"Semantic version of this specific version of the automation (format: major.minor).\nIncremented each time the automation is updated or published.\nExamples: \"0.1\", \"1.0\", \"1.1\", \"2.0\"","readOnly":true},"connections":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v1BookConnection"},"description":"Book connections required by this automation for execution.\nMaps connection names to their metadata.\nThese connections are resolved and made available during automation execution."},"update_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last updated.\nUpdated whenever the automation metadata, code, or dependencies change.","readOnly":true},"update_user_id":{"type":"string","description":"The ID of the user who last updated this automation.","readOnly":true},"delete_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was deleted.","readOnly":true},"purge_time":{"type":"string","format":"date-time","description":"Timestamp when the automation will be purged.","readOnly":true},"input_specs":{"type":"array","items":{"$ref":"#/components/schemas/v1AutomationInputSpec"},"description":"List of input specifications that define the parameters this automation accepts.\nThese specifications describe the expected inputs when the automation is executed."},"description":{"type":"string","description":"Provides additional context and documentation about the automation's purpose and behavior."},"latest_published_version":{"type":"string","title":"Semantic version of the latest published version of the automation (format: major.minor).\nIt will be null in case of no published version.\nExamples: \"0.1\", \"1.0\", \"2.0\"","readOnly":true},"author_id":{"type":"string","description":"The ID of the user who created this automation.","readOnly":true},"code_mapping":{"$ref":"#/components/schemas/v1CodeMapping"},"restore_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was restored from a previous version.\nOnly populated if the automation has been restored.","readOnly":true},"restore_version":{"type":"string","description":"The version string this automation was restored from (e.g., \"1.0\", \"2.1\").\nOnly populated if the automation has been restored.","readOnly":true},"restore_user_id":{"type":"string","description":"The ID of the user who restored this automation.\nOnly populated if the automation has been restored.","readOnly":true},"publish_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last published.\nOnly populated if the automation has been published.","readOnly":true},"publish_user_id":{"type":"string","description":"The ID of the user who last published this automation.\nOnly populated if the automation has been published.","readOnly":true},"activation_state":{"$ref":"#/components/schemas/v1AutomationActivationState"},"default_inputs":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/commonV1Value"},"description":"Default input values for this automation.\nKeys are input parameter names (matching AutomationInputSpec.name),\nvalues are the default values to use when inputs are not explicitly provided.\nThese are used to pre-populate inputs for manual runs and fill missing inputs\nfor trigger-based invocations.","readOnly":true},"marked_outputs":{"type":"array","items":{"type":"string"},"description":"List of output keys that have been marked by the user.\nThese keys identify specific outputs from the automation execution."}},"description":"Automation represents a unit of executable code with associated metadata and dependencies.\nAutomations can be in DRAFT or PUBLISHED state, where drafts can be modified and\npublished automations are immutable and executable.\nAutomation IDs are unique nano ID strings (21 characters, URL-safe: A-Za-z0-9_-).","required":["display_name"]},"v1BookConnection":{"type":"object","properties":{"connection_id":{"type":"string","description":"Unique identifier for this connection resource."},"endpoint":{"type":"string","description":"Endpoint for the connection."}},"description":"BookConnection is a resource representing a connection to a book instance.\nA connection has a unique identifier and an endpoint."},"v1AutomationInputSpec":{"type":"object","properties":{"name":{"type":"string","description":"The name of the input parameter."},"type":{"$ref":"#/components/schemas/v1ValueType"}},"description":"AutomationInputSpec defines the specification for an input parameter of an automation.","required":["name"]},"v1ValueType":{"type":"object","properties":{"scalar_type":{"$ref":"#/components/schemas/v1ValueScalarType"},"optional_type":{"$ref":"#/components/schemas/v1ValueOptionalType"},"list_type":{"$ref":"#/components/schemas/v1ValueListType"},"dictionary_type":{"$ref":"#/components/schemas/v1ValueDictionaryType"},"table_type":{"$ref":"#/components/schemas/v1ValueTableType"},"opaque_type":{"$ref":"#/components/schemas/v1ValueOpaqueType"},"any_type":{"$ref":"#/components/schemas/v1ValueAnyType"},"union_type":{"$ref":"#/components/schemas/v1ValueUnionType"},"sensitive_type":{"$ref":"#/components/schemas/v1ValueSensitiveType"},"enum_type":{"$ref":"#/components/schemas/v1ValueEnumType"},"generic_dictionary_type":{"$ref":"#/components/schemas/v1ValueGenericDictionaryType"}},"title":"Represents a complete value type definition using a discriminated union"},"v1ValueScalarType":{"type":"string","enum":["VALUE_SCALAR_TYPE_UNSPECIFIED","VALUE_SCALAR_TYPE_TEXT","VALUE_SCALAR_TYPE_NUMBER","VALUE_SCALAR_TYPE_BOOLEAN","VALUE_SCALAR_TYPE_DATETIME","VALUE_SCALAR_TYPE_DATE","VALUE_SCALAR_TYPE_TIME","VALUE_SCALAR_TYPE_FILE"],"default":"VALUE_SCALAR_TYPE_UNSPECIFIED","description":"- VALUE_SCALAR_TYPE_UNSPECIFIED: Unspecified value type\n - VALUE_SCALAR_TYPE_TEXT: A text value type\n - VALUE_SCALAR_TYPE_NUMBER: A number value type\n - VALUE_SCALAR_TYPE_BOOLEAN: A boolean value type\n - VALUE_SCALAR_TYPE_DATETIME: A datetime value type\n - VALUE_SCALAR_TYPE_DATE: A date value type\n - VALUE_SCALAR_TYPE_TIME: A time value type\n - VALUE_SCALAR_TYPE_FILE: A file value type","title":"Supported Value Scalar Types"},"v1ValueOptionalType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that can be optional (nullable)"},"v1ValueListType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a list/array value type containing elements of a specific type"},"v1ValueDictionaryType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this dictionary represents"},"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueDictionaryTypeField"},"title":"The named fields contained in this dictionary"},"description":{"type":"string","title":"Optional human-readable description of this dictionary type"}},"title":"Represents a dictionary/object value type with named fields"},"v1ValueDictionaryTypeField":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this field"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this field"}},"title":"Represents a single field within a dictionary value type"},"v1ValueTableType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this table represents"},"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueTableTypeColumn"},"title":"The columns that make up this table"},"description":{"type":"string","title":"Optional human-readable description of this table type"}},"title":"Represents a table value type with structured columns"},"v1ValueTableTypeColumn":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this column"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this column"}},"title":"Represents a single column within a table value type"},"v1ValueOpaqueType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this opaque type represents"},"description":{"type":"string","title":"Optional human-readable description of this opaque type"}},"title":"Represents an opaque value type with semantic meaning but unknown internal structure"},"v1ValueAnyType":{"type":"object","title":"Represents a value type that can hold any kind of value"},"v1ValueUnionType":{"type":"object","properties":{"inners":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueType"},"title":"The possible value types in this union"}},"title":"Represents a union value type that can be one of several possible types"},"v1ValueSensitiveType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that contains sensitive information"},"v1ValueEnumType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this enum represents"},"members":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueEnumTypeMember"},"title":"The available options/members of this enum"},"description":{"type":"string","title":"Optional human-readable description of this enum type"}},"title":"Represents an enumeration value type with predefined options"},"v1ValueEnumTypeMember":{"type":"object","properties":{"name":{"type":"string","title":"The programmatic name of this enum member"},"description":{"type":"string","title":"Optional human-readable description of this enum member"}},"title":"Represents a single member/option within an enum value type"},"v1ValueGenericDictionaryType":{"type":"object","properties":{"key_type":{"$ref":"#/components/schemas/v1ValueType"},"value_type":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represent a generic dictionary that can hold any entry of a particular key and value type"},"v1CodeMapping":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1CodeMappingEntry"},"description":"List of mapping entries that associate SPy code regions with English code regions.\nEach entry defines a paired relationship between a span in the SPy code and\na span in the English code representation."}},"description":"CodeMapping represents a bidirectional mapping between SPy (Subset-of-Python) code\nand English code locations within an automation. This mapping enables navigation between\nthe two representations, facilitating debugging, traceability, and synchronized editing.\nEach entry in the mapping associates a region in the SPy code with its corresponding\nregion in the English code. The mapping relationship is many-to-many and entries may\noverlap.","required":["entries"]},"v1CodeMappingEntry":{"type":"object","properties":{"spy_location":{"$ref":"#/components/schemas/commonV1Location"},"english_location":{"$ref":"#/components/schemas/commonV1Location"}},"description":"CodeMappingEntry represents a single mapping between a region in SPy code and\nits corresponding region in English code. This bidirectional association allows\nnavigation from SPy to English and vice versa, enabling synchronized views and\ndebugging across both representations of the automation logic.","required":["spy_location","english_location"]},"commonV1Location":{"type":"object","properties":{"start_byte":{"type":"string","format":"int64","title":"Starting Byte of the span, It will be zero-based"},"end_byte":{"type":"string","format":"int64","title":"Ending Byte(exclusive) of the span, It will be zero-based"}},"description":"Location represents a generic span within some underlying content.\nIt specifies the starting byte offset and the ending byte offset (exclusive) of the span.\nThis can be used for pointing to regions in files, buffers, logs, messages,\nor any other byte-addressable resource."},"v1AutomationActivationState":{"type":"string","enum":["AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","AUTOMATION_ACTIVATION_STATE_ACTIVE","AUTOMATION_ACTIVATION_STATE_DEACTIVATED"],"default":"AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","description":"Activation state of a published automation.\nControls whether the automation can execute published runs.\n\n - AUTOMATION_ACTIVATION_STATE_UNSPECIFIED: Unspecified state. Used when automation has no published version.\nActivation state is only meaningful after publishing.\n - AUTOMATION_ACTIVATION_STATE_ACTIVE: Automation is active and can execute published runs.\n - AUTOMATION_ACTIVATION_STATE_DEACTIVATED: Automation is deactivated and cannot execute published runs.\nEvents will be logged but not executed."},"commonV1Value":{"type":"object","properties":{"null_value":{"type":"string","title":"Represents the absence of a value (None/null/undefined)"},"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"},"duration":{"type":"string","title":"Signed duration representing a span of time"},"list":{"$ref":"#/components/schemas/v1List"},"dictionary":{"$ref":"#/components/schemas/v1Dictionary"},"file":{"$ref":"#/components/schemas/v1FileValue"},"table":{"$ref":"#/components/schemas/v1TableValue"},"set":{"$ref":"#/components/schemas/v1Set"}},"description":"Represents a runtime value that can be produced by the Jarvis interpreter.\n\nThis message provides a type-safe way to serialize and transmit values between\nthe Jarvis interpreter and other services via gRPC. It supports all the basic\ndata types that can be represented in the Jarvis language runtime.\n\nThe oneof structure ensures that exactly one value type is set at a time,\nproviding both type safety and efficient serialization."},"v1Number":{"type":"object","properties":{"lo":{"type":"integer","format":"int64","description":"Low 32 bits of the 96-bit mantissa."},"mid":{"type":"integer","format":"int64","description":"Middle 32 bits of the 96-bit mantissa."},"hi":{"type":"integer","format":"int64","description":"High 32 bits of the 96-bit mantissa."},"flags":{"type":"integer","format":"int64","description":"Flags word:\n - Bits 16–23: scale (0–28)\n - Bit 31: sign (0 = positive, 1 = negative)\n - Other bits must be zero."}},"description":"A fixed-precision decimal number with up to 28 fractional digits.\n\nThis message represents decimal numbers with exact precision, avoiding\nfloating-point rounding errors. It's particularly useful for financial\ncalculations, measurements, and any scenario where exact decimal\nrepresentation is required.\n\nThe value is calculated as: m / 10^e, where:\n - m is an unsigned 96-bit integer composed of (lo, mid, hi)\n - e is the scale (0–28) stored in flags bits 16–23\n - sign is encoded in flags bit 31 (0 = positive, 1 = negative)\n\nExamples:\n - 123.45 would have m=12345, e=2\n - -0.001 would have m=1, e=3, with sign bit set\n"},"typeDate":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year."},"month":{"type":"integer","format":"int32","description":"Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day."},"day":{"type":"integer","format":"int32","description":"Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant."}},"description":"* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.","title":"Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:"},"typeTimeOfDay":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","description":"Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time."},"minutes":{"type":"integer","format":"int32","description":"Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."}},"description":"Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`."},"typeDateTime":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a\ndatetime without a year."},"month":{"type":"integer","format":"int32","description":"Required. Month of year. Must be from 1 to 12."},"day":{"type":"integer","format":"int32","description":"Required. Day of month. Must be from 1 to 31 and valid for the year and\nmonth."},"hours":{"type":"integer","format":"int32","description":"Required. Hours of day in 24 hour format. Should be from 0 to 23. An API\nmay choose to allow the value \"24:00:00\" for scenarios like business\nclosing time."},"minutes":{"type":"integer","format":"int32","description":"Required. Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Required. Seconds of minutes of the time. Must normally be from 0 to 59. An\nAPI may allow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Required. Fractions of seconds in nanoseconds. Must be from 0 to\n999,999,999."},"utc_offset":{"type":"string","description":"UTC offset. Must be whole seconds, between -18 hours and +18 hours.\nFor example, a UTC offset of -4:00 would be represented as\n{ seconds: -14400 }."},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"}},"description":"Represents civil time (or occasionally physical time).\n\nThis type can represent a civil time in one of a few possible ways:\n\n * When utc_offset is set and time_zone is unset: a civil time on a calendar\n   day with a particular offset from UTC.\n * When time_zone is set and utc_offset is unset: a civil time on a calendar\n   day in a particular time zone.\n * When neither time_zone nor utc_offset is set: a civil time on a calendar\n   day in local time.\n\nThe date is relative to the Proleptic Gregorian Calendar.\n\nIf year is 0, the DateTime is considered not to have a specific year. month\nand day must have valid, non-zero values.\n\nThis type may also be used to represent a physical time if all the date and\ntime fields are set and either case of the `time_offset` oneof is set.\nConsider using `Timestamp` message for physical time instead. If your use\ncase also would like to store the user's timezone, that can be done in\nanother field.\n\nThis type is more flexible than some applications may want. Make sure to\ndocument and validate your application's limitations."},"typeTimeZone":{"type":"object","properties":{"id":{"type":"string","description":"IANA Time Zone Database time zone, e.g. \"America/New_York\"."},"version":{"type":"string","description":"Optional. IANA Time Zone Database version number, e.g. \"2019a\"."}},"description":"Represents a time zone from the\n[IANA Time Zone Database](https://www.iana.org/time-zones)."},"v1List":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/commonV1Value"},"title":"The ordered sequence of values in this list"}},"description":"Represents an ordered collection of values (similar to arrays or lists).\n\nThis message can contain any number of Value elements in a specific order.\nLists are mutable and can grow or shrink during runtime. Elements can be\naccessed by their zero-based index position.\n\nExamples:\n - [1, 2, 3] - list of numbers\n - [\"hello\", \"world\"] - list of strings\n - [true, 42, \"mixed\"] - list with mixed types\n - [[1, 2], [3, 4]] - nested lists"},"v1Dictionary":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryEntry"},"title":"The key-value pairs stored in this dictionary"}},"description":"Represents a key-value mapping (similar to hash maps or dictionaries).\n\nThis message stores associations between keys and values, where keys must be\nhashable types (null, bool, Number, string, Date, TimeOfDay, DateTime, TimeZone). Keys are\nunique within a dictionary - duplicate keys will overwrite previous values.\n\nThe dictionary maintains insertion order for consistent iteration behavior.\n\nExamples:\n - {\"name\": \"John\", \"age\": 30} - string keys with mixed values\n - {1: \"one\", 2: \"two\"} - number keys with string values\n - {\"nested\": {\"inner\": \"value\"}} - nested dictionaries"},"v1DictionaryEntry":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/v1HashableValue"},"value":{"$ref":"#/components/schemas/commonV1Value"}},"description":"Represents a single key-value pair within a Dictionary.\n\nBoth key and value can be any Value type, though keys should be\nhashable types for proper dictionary behavior. Non-hashable keys\n(like lists or dictionaries) may cause runtime errors."},"v1HashableValue":{"type":"object","properties":{"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"duration":{"type":"string","title":"Signed duration representing a span of time"}},"description":"Represents a hashable value that can be used as a dictionary key.\n\nThis message contains only the hashable types from the Value message,\ncorresponding to Python's hashable types. These types can be safely\nused as keys in maps and dictionaries.\n\nHashable types include: bool, Number, string, Date, TimeOfDay, DateTime\nand Duration."},"v1FileValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1File"}},"title":"A file value represents a file that can be either inline or remote"},"v1File":{"type":"object","properties":{"file_name":{"type":"string","title":"The name of the file"},"content":{"type":"string","format":"byte","title":"Content of the file as a byte stream"}}},"v1TableValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1Table"}},"title":"A table that is represented remote as an URL to a file that is Feather-formatted\nor inline via the Table message"},"v1Table":{"type":"object","properties":{"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1Column"}}},"description":"A table is a column-oriented structure. All the values inside each column must\nbe of equal length."},"v1Column":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"}},"name":{"type":"string"}}},"bdkV1Value":{"type":"object","properties":{"null_value":{"type":"string"},"conceptual_value":{"$ref":"#/components/schemas/v1NounPhrase"},"text_value":{"type":"string"},"number_value":{"type":"number","format":"double"},"boolean_value":{"type":"boolean"},"datetime_value":{"type":"string","format":"date-time"},"date_value":{"$ref":"#/components/schemas/v1Date"},"time_value":{"$ref":"#/components/schemas/v1Time"},"file_value":{"$ref":"#/components/schemas/v1FileValue"},"dictionary_value":{"$ref":"#/components/schemas/v1DictionaryValue"},"list_value":{"$ref":"#/components/schemas/bdkV1ListValue"},"opaque_value":{"$ref":"#/components/schemas/v1OpaqueValue"},"table_value":{"$ref":"#/components/schemas/v1TableValue"},"sensitive_value":{"$ref":"#/components/schemas/v1SensitiveValue"}},"title":"A union of all possible values"},"v1NounPhrase":{"type":"object","properties":{"modifiers":{"type":"array","items":{"type":"string"},"title":"Optional adjectives attached to the noun"},"head":{"type":"string","title":"Noun of the phrase"}}},"v1Date":{"type":"object","properties":{"year":{"type":"integer","format":"int32","title":"Year of the date"},"month":{"type":"integer","format":"int32","title":"Month of a year"},"day":{"type":"integer","format":"int32","title":"Day of a month"}}},"v1Time":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","title":"Hours of day"},"minutes":{"type":"integer","format":"int32","title":"Minutes of hour of day"},"seconds":{"type":"integer","format":"int32","title":"Seconds of minutes of the time"},"nanos":{"type":"integer","format":"int32","title":"Fractions of seconds in nanoseconds"}}},"v1DictionaryValue":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryValueField"},"title":"All the fields alongside their values in the dictionary"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the dictionary"}},"title":"Value to be used when the type is dictionary"},"v1DictionaryValueField":{"type":"object","properties":{"key":{"type":"string"},"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"Each key-value pair inside a dictionary"},"bdkV1ListValue":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"},"title":"All the values inside the list"}},"title":"A collection of values"},"v1OpaqueValue":{"type":"object","properties":{"content":{"type":"string","format":"byte","title":"Content of the opaque value"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the opaque"}}},"v1SensitiveValue":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"A sensitive value is any value marked as sensitive (to prevent exposure)"},"v1Set":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/v1HashableValue"},"title":"The unique elements stored in this set\nAll elements must be hashable types"}},"description":"Represents an unordered collection of unique values.\n\nThis message stores a collection of unique elements, where duplicate values\nare automatically removed. Only hashable types can be stored in sets.\nSets are useful for membership testing, removing duplicates, and mathematical\nset operations like union, intersection, and difference.\n\nThe set does not maintain insertion order - elements may appear in any order\nduring iteration.\n\nExamples:\n - {1, 2, 3} - set of numbers\n - {\"apple\", \"banana\", \"cherry\"} - set of strings\n - {true, false} - set of booleans\n - {1, \"hello\", true} - set with mixed hashable types"},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}":{"get":{"summary":"Get Automation","operationId":"GetAutomation","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1Automation"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}}],"tags":["Automations"]}}}}
```

## Query Automation

> This custom method allows explicit selection of which version stage to retrieve:\
> \- AUTOMATION\_STAGE\_DRAFT: Returns the latest draft version\
> \- AUTOMATION\_STAGE\_PUBLISHED: Returns the latest published version

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1Automation":{"type":"object","properties":{"name":{"type":"string","title":"The automation name (e.g. 'automations/{automation}')"},"display_name":{"type":"string","description":"Human-readable name of the automation for identification and display.\nMust be unique within the user's namespace."},"english_code":{"type":"string","description":"User-facing English description code that explains what the automation does.\nThis is a human-readable representation of the automation's purpose and logic."},"code":{"type":"string","description":"SPy (Subset-of Python) executable code that defines the automation logic.\nThis code is executed when the automation is invoked with inputs."},"artifacts":{"type":"object","additionalProperties":{"type":"string","format":"byte"},"description":"Additional artifacts associated with the automation (e.g., data files, configurations).\nKeys are artifact names, values are the binary content of the artifacts.\nThese artifacts are available to the automation during execution."},"create_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was originally created.\nThis value never changes after creation.","readOnly":true},"version":{"type":"string","title":"Semantic version of this specific version of the automation (format: major.minor).\nIncremented each time the automation is updated or published.\nExamples: \"0.1\", \"1.0\", \"1.1\", \"2.0\"","readOnly":true},"connections":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v1BookConnection"},"description":"Book connections required by this automation for execution.\nMaps connection names to their metadata.\nThese connections are resolved and made available during automation execution."},"update_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last updated.\nUpdated whenever the automation metadata, code, or dependencies change.","readOnly":true},"update_user_id":{"type":"string","description":"The ID of the user who last updated this automation.","readOnly":true},"delete_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was deleted.","readOnly":true},"purge_time":{"type":"string","format":"date-time","description":"Timestamp when the automation will be purged.","readOnly":true},"input_specs":{"type":"array","items":{"$ref":"#/components/schemas/v1AutomationInputSpec"},"description":"List of input specifications that define the parameters this automation accepts.\nThese specifications describe the expected inputs when the automation is executed."},"description":{"type":"string","description":"Provides additional context and documentation about the automation's purpose and behavior."},"latest_published_version":{"type":"string","title":"Semantic version of the latest published version of the automation (format: major.minor).\nIt will be null in case of no published version.\nExamples: \"0.1\", \"1.0\", \"2.0\"","readOnly":true},"author_id":{"type":"string","description":"The ID of the user who created this automation.","readOnly":true},"code_mapping":{"$ref":"#/components/schemas/v1CodeMapping"},"restore_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was restored from a previous version.\nOnly populated if the automation has been restored.","readOnly":true},"restore_version":{"type":"string","description":"The version string this automation was restored from (e.g., \"1.0\", \"2.1\").\nOnly populated if the automation has been restored.","readOnly":true},"restore_user_id":{"type":"string","description":"The ID of the user who restored this automation.\nOnly populated if the automation has been restored.","readOnly":true},"publish_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last published.\nOnly populated if the automation has been published.","readOnly":true},"publish_user_id":{"type":"string","description":"The ID of the user who last published this automation.\nOnly populated if the automation has been published.","readOnly":true},"activation_state":{"$ref":"#/components/schemas/v1AutomationActivationState"},"default_inputs":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/commonV1Value"},"description":"Default input values for this automation.\nKeys are input parameter names (matching AutomationInputSpec.name),\nvalues are the default values to use when inputs are not explicitly provided.\nThese are used to pre-populate inputs for manual runs and fill missing inputs\nfor trigger-based invocations.","readOnly":true},"marked_outputs":{"type":"array","items":{"type":"string"},"description":"List of output keys that have been marked by the user.\nThese keys identify specific outputs from the automation execution."}},"description":"Automation represents a unit of executable code with associated metadata and dependencies.\nAutomations can be in DRAFT or PUBLISHED state, where drafts can be modified and\npublished automations are immutable and executable.\nAutomation IDs are unique nano ID strings (21 characters, URL-safe: A-Za-z0-9_-).","required":["display_name"]},"v1BookConnection":{"type":"object","properties":{"connection_id":{"type":"string","description":"Unique identifier for this connection resource."},"endpoint":{"type":"string","description":"Endpoint for the connection."}},"description":"BookConnection is a resource representing a connection to a book instance.\nA connection has a unique identifier and an endpoint."},"v1AutomationInputSpec":{"type":"object","properties":{"name":{"type":"string","description":"The name of the input parameter."},"type":{"$ref":"#/components/schemas/v1ValueType"}},"description":"AutomationInputSpec defines the specification for an input parameter of an automation.","required":["name"]},"v1ValueType":{"type":"object","properties":{"scalar_type":{"$ref":"#/components/schemas/v1ValueScalarType"},"optional_type":{"$ref":"#/components/schemas/v1ValueOptionalType"},"list_type":{"$ref":"#/components/schemas/v1ValueListType"},"dictionary_type":{"$ref":"#/components/schemas/v1ValueDictionaryType"},"table_type":{"$ref":"#/components/schemas/v1ValueTableType"},"opaque_type":{"$ref":"#/components/schemas/v1ValueOpaqueType"},"any_type":{"$ref":"#/components/schemas/v1ValueAnyType"},"union_type":{"$ref":"#/components/schemas/v1ValueUnionType"},"sensitive_type":{"$ref":"#/components/schemas/v1ValueSensitiveType"},"enum_type":{"$ref":"#/components/schemas/v1ValueEnumType"},"generic_dictionary_type":{"$ref":"#/components/schemas/v1ValueGenericDictionaryType"}},"title":"Represents a complete value type definition using a discriminated union"},"v1ValueScalarType":{"type":"string","enum":["VALUE_SCALAR_TYPE_UNSPECIFIED","VALUE_SCALAR_TYPE_TEXT","VALUE_SCALAR_TYPE_NUMBER","VALUE_SCALAR_TYPE_BOOLEAN","VALUE_SCALAR_TYPE_DATETIME","VALUE_SCALAR_TYPE_DATE","VALUE_SCALAR_TYPE_TIME","VALUE_SCALAR_TYPE_FILE"],"default":"VALUE_SCALAR_TYPE_UNSPECIFIED","description":"- VALUE_SCALAR_TYPE_UNSPECIFIED: Unspecified value type\n - VALUE_SCALAR_TYPE_TEXT: A text value type\n - VALUE_SCALAR_TYPE_NUMBER: A number value type\n - VALUE_SCALAR_TYPE_BOOLEAN: A boolean value type\n - VALUE_SCALAR_TYPE_DATETIME: A datetime value type\n - VALUE_SCALAR_TYPE_DATE: A date value type\n - VALUE_SCALAR_TYPE_TIME: A time value type\n - VALUE_SCALAR_TYPE_FILE: A file value type","title":"Supported Value Scalar Types"},"v1ValueOptionalType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that can be optional (nullable)"},"v1ValueListType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a list/array value type containing elements of a specific type"},"v1ValueDictionaryType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this dictionary represents"},"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueDictionaryTypeField"},"title":"The named fields contained in this dictionary"},"description":{"type":"string","title":"Optional human-readable description of this dictionary type"}},"title":"Represents a dictionary/object value type with named fields"},"v1ValueDictionaryTypeField":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this field"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this field"}},"title":"Represents a single field within a dictionary value type"},"v1ValueTableType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this table represents"},"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueTableTypeColumn"},"title":"The columns that make up this table"},"description":{"type":"string","title":"Optional human-readable description of this table type"}},"title":"Represents a table value type with structured columns"},"v1ValueTableTypeColumn":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this column"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this column"}},"title":"Represents a single column within a table value type"},"v1ValueOpaqueType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this opaque type represents"},"description":{"type":"string","title":"Optional human-readable description of this opaque type"}},"title":"Represents an opaque value type with semantic meaning but unknown internal structure"},"v1ValueAnyType":{"type":"object","title":"Represents a value type that can hold any kind of value"},"v1ValueUnionType":{"type":"object","properties":{"inners":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueType"},"title":"The possible value types in this union"}},"title":"Represents a union value type that can be one of several possible types"},"v1ValueSensitiveType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that contains sensitive information"},"v1ValueEnumType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this enum represents"},"members":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueEnumTypeMember"},"title":"The available options/members of this enum"},"description":{"type":"string","title":"Optional human-readable description of this enum type"}},"title":"Represents an enumeration value type with predefined options"},"v1ValueEnumTypeMember":{"type":"object","properties":{"name":{"type":"string","title":"The programmatic name of this enum member"},"description":{"type":"string","title":"Optional human-readable description of this enum member"}},"title":"Represents a single member/option within an enum value type"},"v1ValueGenericDictionaryType":{"type":"object","properties":{"key_type":{"$ref":"#/components/schemas/v1ValueType"},"value_type":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represent a generic dictionary that can hold any entry of a particular key and value type"},"v1CodeMapping":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1CodeMappingEntry"},"description":"List of mapping entries that associate SPy code regions with English code regions.\nEach entry defines a paired relationship between a span in the SPy code and\na span in the English code representation."}},"description":"CodeMapping represents a bidirectional mapping between SPy (Subset-of-Python) code\nand English code locations within an automation. This mapping enables navigation between\nthe two representations, facilitating debugging, traceability, and synchronized editing.\nEach entry in the mapping associates a region in the SPy code with its corresponding\nregion in the English code. The mapping relationship is many-to-many and entries may\noverlap.","required":["entries"]},"v1CodeMappingEntry":{"type":"object","properties":{"spy_location":{"$ref":"#/components/schemas/commonV1Location"},"english_location":{"$ref":"#/components/schemas/commonV1Location"}},"description":"CodeMappingEntry represents a single mapping between a region in SPy code and\nits corresponding region in English code. This bidirectional association allows\nnavigation from SPy to English and vice versa, enabling synchronized views and\ndebugging across both representations of the automation logic.","required":["spy_location","english_location"]},"commonV1Location":{"type":"object","properties":{"start_byte":{"type":"string","format":"int64","title":"Starting Byte of the span, It will be zero-based"},"end_byte":{"type":"string","format":"int64","title":"Ending Byte(exclusive) of the span, It will be zero-based"}},"description":"Location represents a generic span within some underlying content.\nIt specifies the starting byte offset and the ending byte offset (exclusive) of the span.\nThis can be used for pointing to regions in files, buffers, logs, messages,\nor any other byte-addressable resource."},"v1AutomationActivationState":{"type":"string","enum":["AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","AUTOMATION_ACTIVATION_STATE_ACTIVE","AUTOMATION_ACTIVATION_STATE_DEACTIVATED"],"default":"AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","description":"Activation state of a published automation.\nControls whether the automation can execute published runs.\n\n - AUTOMATION_ACTIVATION_STATE_UNSPECIFIED: Unspecified state. Used when automation has no published version.\nActivation state is only meaningful after publishing.\n - AUTOMATION_ACTIVATION_STATE_ACTIVE: Automation is active and can execute published runs.\n - AUTOMATION_ACTIVATION_STATE_DEACTIVATED: Automation is deactivated and cannot execute published runs.\nEvents will be logged but not executed."},"commonV1Value":{"type":"object","properties":{"null_value":{"type":"string","title":"Represents the absence of a value (None/null/undefined)"},"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"},"duration":{"type":"string","title":"Signed duration representing a span of time"},"list":{"$ref":"#/components/schemas/v1List"},"dictionary":{"$ref":"#/components/schemas/v1Dictionary"},"file":{"$ref":"#/components/schemas/v1FileValue"},"table":{"$ref":"#/components/schemas/v1TableValue"},"set":{"$ref":"#/components/schemas/v1Set"}},"description":"Represents a runtime value that can be produced by the Jarvis interpreter.\n\nThis message provides a type-safe way to serialize and transmit values between\nthe Jarvis interpreter and other services via gRPC. It supports all the basic\ndata types that can be represented in the Jarvis language runtime.\n\nThe oneof structure ensures that exactly one value type is set at a time,\nproviding both type safety and efficient serialization."},"v1Number":{"type":"object","properties":{"lo":{"type":"integer","format":"int64","description":"Low 32 bits of the 96-bit mantissa."},"mid":{"type":"integer","format":"int64","description":"Middle 32 bits of the 96-bit mantissa."},"hi":{"type":"integer","format":"int64","description":"High 32 bits of the 96-bit mantissa."},"flags":{"type":"integer","format":"int64","description":"Flags word:\n - Bits 16–23: scale (0–28)\n - Bit 31: sign (0 = positive, 1 = negative)\n - Other bits must be zero."}},"description":"A fixed-precision decimal number with up to 28 fractional digits.\n\nThis message represents decimal numbers with exact precision, avoiding\nfloating-point rounding errors. It's particularly useful for financial\ncalculations, measurements, and any scenario where exact decimal\nrepresentation is required.\n\nThe value is calculated as: m / 10^e, where:\n - m is an unsigned 96-bit integer composed of (lo, mid, hi)\n - e is the scale (0–28) stored in flags bits 16–23\n - sign is encoded in flags bit 31 (0 = positive, 1 = negative)\n\nExamples:\n - 123.45 would have m=12345, e=2\n - -0.001 would have m=1, e=3, with sign bit set\n"},"typeDate":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year."},"month":{"type":"integer","format":"int32","description":"Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day."},"day":{"type":"integer","format":"int32","description":"Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant."}},"description":"* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.","title":"Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:"},"typeTimeOfDay":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","description":"Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time."},"minutes":{"type":"integer","format":"int32","description":"Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."}},"description":"Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`."},"typeDateTime":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a\ndatetime without a year."},"month":{"type":"integer","format":"int32","description":"Required. Month of year. Must be from 1 to 12."},"day":{"type":"integer","format":"int32","description":"Required. Day of month. Must be from 1 to 31 and valid for the year and\nmonth."},"hours":{"type":"integer","format":"int32","description":"Required. Hours of day in 24 hour format. Should be from 0 to 23. An API\nmay choose to allow the value \"24:00:00\" for scenarios like business\nclosing time."},"minutes":{"type":"integer","format":"int32","description":"Required. Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Required. Seconds of minutes of the time. Must normally be from 0 to 59. An\nAPI may allow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Required. Fractions of seconds in nanoseconds. Must be from 0 to\n999,999,999."},"utc_offset":{"type":"string","description":"UTC offset. Must be whole seconds, between -18 hours and +18 hours.\nFor example, a UTC offset of -4:00 would be represented as\n{ seconds: -14400 }."},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"}},"description":"Represents civil time (or occasionally physical time).\n\nThis type can represent a civil time in one of a few possible ways:\n\n * When utc_offset is set and time_zone is unset: a civil time on a calendar\n   day with a particular offset from UTC.\n * When time_zone is set and utc_offset is unset: a civil time on a calendar\n   day in a particular time zone.\n * When neither time_zone nor utc_offset is set: a civil time on a calendar\n   day in local time.\n\nThe date is relative to the Proleptic Gregorian Calendar.\n\nIf year is 0, the DateTime is considered not to have a specific year. month\nand day must have valid, non-zero values.\n\nThis type may also be used to represent a physical time if all the date and\ntime fields are set and either case of the `time_offset` oneof is set.\nConsider using `Timestamp` message for physical time instead. If your use\ncase also would like to store the user's timezone, that can be done in\nanother field.\n\nThis type is more flexible than some applications may want. Make sure to\ndocument and validate your application's limitations."},"typeTimeZone":{"type":"object","properties":{"id":{"type":"string","description":"IANA Time Zone Database time zone, e.g. \"America/New_York\"."},"version":{"type":"string","description":"Optional. IANA Time Zone Database version number, e.g. \"2019a\"."}},"description":"Represents a time zone from the\n[IANA Time Zone Database](https://www.iana.org/time-zones)."},"v1List":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/commonV1Value"},"title":"The ordered sequence of values in this list"}},"description":"Represents an ordered collection of values (similar to arrays or lists).\n\nThis message can contain any number of Value elements in a specific order.\nLists are mutable and can grow or shrink during runtime. Elements can be\naccessed by their zero-based index position.\n\nExamples:\n - [1, 2, 3] - list of numbers\n - [\"hello\", \"world\"] - list of strings\n - [true, 42, \"mixed\"] - list with mixed types\n - [[1, 2], [3, 4]] - nested lists"},"v1Dictionary":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryEntry"},"title":"The key-value pairs stored in this dictionary"}},"description":"Represents a key-value mapping (similar to hash maps or dictionaries).\n\nThis message stores associations between keys and values, where keys must be\nhashable types (null, bool, Number, string, Date, TimeOfDay, DateTime, TimeZone). Keys are\nunique within a dictionary - duplicate keys will overwrite previous values.\n\nThe dictionary maintains insertion order for consistent iteration behavior.\n\nExamples:\n - {\"name\": \"John\", \"age\": 30} - string keys with mixed values\n - {1: \"one\", 2: \"two\"} - number keys with string values\n - {\"nested\": {\"inner\": \"value\"}} - nested dictionaries"},"v1DictionaryEntry":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/v1HashableValue"},"value":{"$ref":"#/components/schemas/commonV1Value"}},"description":"Represents a single key-value pair within a Dictionary.\n\nBoth key and value can be any Value type, though keys should be\nhashable types for proper dictionary behavior. Non-hashable keys\n(like lists or dictionaries) may cause runtime errors."},"v1HashableValue":{"type":"object","properties":{"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"duration":{"type":"string","title":"Signed duration representing a span of time"}},"description":"Represents a hashable value that can be used as a dictionary key.\n\nThis message contains only the hashable types from the Value message,\ncorresponding to Python's hashable types. These types can be safely\nused as keys in maps and dictionaries.\n\nHashable types include: bool, Number, string, Date, TimeOfDay, DateTime\nand Duration."},"v1FileValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1File"}},"title":"A file value represents a file that can be either inline or remote"},"v1File":{"type":"object","properties":{"file_name":{"type":"string","title":"The name of the file"},"content":{"type":"string","format":"byte","title":"Content of the file as a byte stream"}}},"v1TableValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1Table"}},"title":"A table that is represented remote as an URL to a file that is Feather-formatted\nor inline via the Table message"},"v1Table":{"type":"object","properties":{"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1Column"}}},"description":"A table is a column-oriented structure. All the values inside each column must\nbe of equal length."},"v1Column":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"}},"name":{"type":"string"}}},"bdkV1Value":{"type":"object","properties":{"null_value":{"type":"string"},"conceptual_value":{"$ref":"#/components/schemas/v1NounPhrase"},"text_value":{"type":"string"},"number_value":{"type":"number","format":"double"},"boolean_value":{"type":"boolean"},"datetime_value":{"type":"string","format":"date-time"},"date_value":{"$ref":"#/components/schemas/v1Date"},"time_value":{"$ref":"#/components/schemas/v1Time"},"file_value":{"$ref":"#/components/schemas/v1FileValue"},"dictionary_value":{"$ref":"#/components/schemas/v1DictionaryValue"},"list_value":{"$ref":"#/components/schemas/bdkV1ListValue"},"opaque_value":{"$ref":"#/components/schemas/v1OpaqueValue"},"table_value":{"$ref":"#/components/schemas/v1TableValue"},"sensitive_value":{"$ref":"#/components/schemas/v1SensitiveValue"}},"title":"A union of all possible values"},"v1NounPhrase":{"type":"object","properties":{"modifiers":{"type":"array","items":{"type":"string"},"title":"Optional adjectives attached to the noun"},"head":{"type":"string","title":"Noun of the phrase"}}},"v1Date":{"type":"object","properties":{"year":{"type":"integer","format":"int32","title":"Year of the date"},"month":{"type":"integer","format":"int32","title":"Month of a year"},"day":{"type":"integer","format":"int32","title":"Day of a month"}}},"v1Time":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","title":"Hours of day"},"minutes":{"type":"integer","format":"int32","title":"Minutes of hour of day"},"seconds":{"type":"integer","format":"int32","title":"Seconds of minutes of the time"},"nanos":{"type":"integer","format":"int32","title":"Fractions of seconds in nanoseconds"}}},"v1DictionaryValue":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryValueField"},"title":"All the fields alongside their values in the dictionary"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the dictionary"}},"title":"Value to be used when the type is dictionary"},"v1DictionaryValueField":{"type":"object","properties":{"key":{"type":"string"},"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"Each key-value pair inside a dictionary"},"bdkV1ListValue":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"},"title":"All the values inside the list"}},"title":"A collection of values"},"v1OpaqueValue":{"type":"object","properties":{"content":{"type":"string","format":"byte","title":"Content of the opaque value"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the opaque"}}},"v1SensitiveValue":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"A sensitive value is any value marked as sensitive (to prevent exposure)"},"v1Set":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/v1HashableValue"},"title":"The unique elements stored in this set\nAll elements must be hashable types"}},"description":"Represents an unordered collection of unique values.\n\nThis message stores a collection of unique elements, where duplicate values\nare automatically removed. Only hashable types can be stored in sets.\nSets are useful for membership testing, removing duplicates, and mathematical\nset operations like union, intersection, and difference.\n\nThe set does not maintain insertion order - elements may appear in any order\nduring iteration.\n\nExamples:\n - {1, 2, 3} - set of numbers\n - {\"apple\", \"banana\", \"cherry\"} - set of strings\n - {true, false} - set of booleans\n - {1, \"hello\", true} - set with mixed hashable types"},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}:query":{"get":{"summary":"Query Automation","description":"This custom method allows explicit selection of which version stage to retrieve:\n- AUTOMATION_STAGE_DRAFT: Returns the latest draft version\n- AUTOMATION_STAGE_PUBLISHED: Returns the latest published version","operationId":"QueryAutomation","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1Automation"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"stage","description":"The publication stage of the automation to retrieve.\nDetermines which version of the automation to return:\n- AUTOMATION_STAGE_DRAFT: Returns the latest draft version\n- AUTOMATION_STAGE_PUBLISHED: Returns the latest published version\n\n - AUTOMATION_STAGE_UNSPECIFIED: Automation stage is not specified.\n - AUTOMATION_STAGE_DRAFT: Automation is in draft stage and can be modified.\n - AUTOMATION_STAGE_PUBLISHED: Automation is published and immutable, ready for execution.","in":"query","required":true,"schema":{"type":"string","enum":["AUTOMATION_STAGE_UNSPECIFIED","AUTOMATION_STAGE_DRAFT","AUTOMATION_STAGE_PUBLISHED"],"default":"AUTOMATION_STAGE_UNSPECIFIED"}}],"tags":["Automations"]}}}}
```

## GET /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations/{automation\_id}/revisions/{revision\_id}

> Get Automation Revision

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1AutomationRevision":{"type":"object","properties":{"name":{"type":"string","description":"The name of the automation revision.\nFormat: organizations/{organization}/workspaces/{workspace}/automations/{automation}/revisions/{revision}\nThe revision ID is the semantic version string (e.g., \"0.1\", \"1.0\", \"2.0\")."},"snapshot":{"$ref":"#/components/schemas/v1Automation"},"create_time":{"type":"string","format":"date-time","description":"Timestamp when this revision was created.","readOnly":true},"alternate_ids":{"type":"array","items":{"type":"string"},"description":"Other revision IDs that reference the same snapshot (e.g., \"latest\").\nPer AIP-162, this allows aliases for revisions.","readOnly":true}},"description":"AutomationRevision represents a historical revision (version) of an automation.\nRevisions are immutable snapshots created each time an automation is updated.\nPer AIP-162, this resource contains the complete state via a snapshot field."},"v1Automation":{"type":"object","properties":{"name":{"type":"string","title":"The automation name (e.g. 'automations/{automation}')"},"display_name":{"type":"string","description":"Human-readable name of the automation for identification and display.\nMust be unique within the user's namespace."},"english_code":{"type":"string","description":"User-facing English description code that explains what the automation does.\nThis is a human-readable representation of the automation's purpose and logic."},"code":{"type":"string","description":"SPy (Subset-of Python) executable code that defines the automation logic.\nThis code is executed when the automation is invoked with inputs."},"artifacts":{"type":"object","additionalProperties":{"type":"string","format":"byte"},"description":"Additional artifacts associated with the automation (e.g., data files, configurations).\nKeys are artifact names, values are the binary content of the artifacts.\nThese artifacts are available to the automation during execution."},"create_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was originally created.\nThis value never changes after creation.","readOnly":true},"version":{"type":"string","title":"Semantic version of this specific version of the automation (format: major.minor).\nIncremented each time the automation is updated or published.\nExamples: \"0.1\", \"1.0\", \"1.1\", \"2.0\"","readOnly":true},"connections":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v1BookConnection"},"description":"Book connections required by this automation for execution.\nMaps connection names to their metadata.\nThese connections are resolved and made available during automation execution."},"update_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last updated.\nUpdated whenever the automation metadata, code, or dependencies change.","readOnly":true},"update_user_id":{"type":"string","description":"The ID of the user who last updated this automation.","readOnly":true},"delete_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was deleted.","readOnly":true},"purge_time":{"type":"string","format":"date-time","description":"Timestamp when the automation will be purged.","readOnly":true},"input_specs":{"type":"array","items":{"$ref":"#/components/schemas/v1AutomationInputSpec"},"description":"List of input specifications that define the parameters this automation accepts.\nThese specifications describe the expected inputs when the automation is executed."},"description":{"type":"string","description":"Provides additional context and documentation about the automation's purpose and behavior."},"latest_published_version":{"type":"string","title":"Semantic version of the latest published version of the automation (format: major.minor).\nIt will be null in case of no published version.\nExamples: \"0.1\", \"1.0\", \"2.0\"","readOnly":true},"author_id":{"type":"string","description":"The ID of the user who created this automation.","readOnly":true},"code_mapping":{"$ref":"#/components/schemas/v1CodeMapping"},"restore_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was restored from a previous version.\nOnly populated if the automation has been restored.","readOnly":true},"restore_version":{"type":"string","description":"The version string this automation was restored from (e.g., \"1.0\", \"2.1\").\nOnly populated if the automation has been restored.","readOnly":true},"restore_user_id":{"type":"string","description":"The ID of the user who restored this automation.\nOnly populated if the automation has been restored.","readOnly":true},"publish_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last published.\nOnly populated if the automation has been published.","readOnly":true},"publish_user_id":{"type":"string","description":"The ID of the user who last published this automation.\nOnly populated if the automation has been published.","readOnly":true},"activation_state":{"$ref":"#/components/schemas/v1AutomationActivationState"},"default_inputs":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/commonV1Value"},"description":"Default input values for this automation.\nKeys are input parameter names (matching AutomationInputSpec.name),\nvalues are the default values to use when inputs are not explicitly provided.\nThese are used to pre-populate inputs for manual runs and fill missing inputs\nfor trigger-based invocations.","readOnly":true},"marked_outputs":{"type":"array","items":{"type":"string"},"description":"List of output keys that have been marked by the user.\nThese keys identify specific outputs from the automation execution."}},"description":"Automation represents a unit of executable code with associated metadata and dependencies.\nAutomations can be in DRAFT or PUBLISHED state, where drafts can be modified and\npublished automations are immutable and executable.\nAutomation IDs are unique nano ID strings (21 characters, URL-safe: A-Za-z0-9_-).","required":["display_name"]},"v1BookConnection":{"type":"object","properties":{"connection_id":{"type":"string","description":"Unique identifier for this connection resource."},"endpoint":{"type":"string","description":"Endpoint for the connection."}},"description":"BookConnection is a resource representing a connection to a book instance.\nA connection has a unique identifier and an endpoint."},"v1AutomationInputSpec":{"type":"object","properties":{"name":{"type":"string","description":"The name of the input parameter."},"type":{"$ref":"#/components/schemas/v1ValueType"}},"description":"AutomationInputSpec defines the specification for an input parameter of an automation.","required":["name"]},"v1ValueType":{"type":"object","properties":{"scalar_type":{"$ref":"#/components/schemas/v1ValueScalarType"},"optional_type":{"$ref":"#/components/schemas/v1ValueOptionalType"},"list_type":{"$ref":"#/components/schemas/v1ValueListType"},"dictionary_type":{"$ref":"#/components/schemas/v1ValueDictionaryType"},"table_type":{"$ref":"#/components/schemas/v1ValueTableType"},"opaque_type":{"$ref":"#/components/schemas/v1ValueOpaqueType"},"any_type":{"$ref":"#/components/schemas/v1ValueAnyType"},"union_type":{"$ref":"#/components/schemas/v1ValueUnionType"},"sensitive_type":{"$ref":"#/components/schemas/v1ValueSensitiveType"},"enum_type":{"$ref":"#/components/schemas/v1ValueEnumType"},"generic_dictionary_type":{"$ref":"#/components/schemas/v1ValueGenericDictionaryType"}},"title":"Represents a complete value type definition using a discriminated union"},"v1ValueScalarType":{"type":"string","enum":["VALUE_SCALAR_TYPE_UNSPECIFIED","VALUE_SCALAR_TYPE_TEXT","VALUE_SCALAR_TYPE_NUMBER","VALUE_SCALAR_TYPE_BOOLEAN","VALUE_SCALAR_TYPE_DATETIME","VALUE_SCALAR_TYPE_DATE","VALUE_SCALAR_TYPE_TIME","VALUE_SCALAR_TYPE_FILE"],"default":"VALUE_SCALAR_TYPE_UNSPECIFIED","description":"- VALUE_SCALAR_TYPE_UNSPECIFIED: Unspecified value type\n - VALUE_SCALAR_TYPE_TEXT: A text value type\n - VALUE_SCALAR_TYPE_NUMBER: A number value type\n - VALUE_SCALAR_TYPE_BOOLEAN: A boolean value type\n - VALUE_SCALAR_TYPE_DATETIME: A datetime value type\n - VALUE_SCALAR_TYPE_DATE: A date value type\n - VALUE_SCALAR_TYPE_TIME: A time value type\n - VALUE_SCALAR_TYPE_FILE: A file value type","title":"Supported Value Scalar Types"},"v1ValueOptionalType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that can be optional (nullable)"},"v1ValueListType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a list/array value type containing elements of a specific type"},"v1ValueDictionaryType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this dictionary represents"},"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueDictionaryTypeField"},"title":"The named fields contained in this dictionary"},"description":{"type":"string","title":"Optional human-readable description of this dictionary type"}},"title":"Represents a dictionary/object value type with named fields"},"v1ValueDictionaryTypeField":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this field"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this field"}},"title":"Represents a single field within a dictionary value type"},"v1ValueTableType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this table represents"},"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueTableTypeColumn"},"title":"The columns that make up this table"},"description":{"type":"string","title":"Optional human-readable description of this table type"}},"title":"Represents a table value type with structured columns"},"v1ValueTableTypeColumn":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this column"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this column"}},"title":"Represents a single column within a table value type"},"v1ValueOpaqueType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this opaque type represents"},"description":{"type":"string","title":"Optional human-readable description of this opaque type"}},"title":"Represents an opaque value type with semantic meaning but unknown internal structure"},"v1ValueAnyType":{"type":"object","title":"Represents a value type that can hold any kind of value"},"v1ValueUnionType":{"type":"object","properties":{"inners":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueType"},"title":"The possible value types in this union"}},"title":"Represents a union value type that can be one of several possible types"},"v1ValueSensitiveType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that contains sensitive information"},"v1ValueEnumType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this enum represents"},"members":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueEnumTypeMember"},"title":"The available options/members of this enum"},"description":{"type":"string","title":"Optional human-readable description of this enum type"}},"title":"Represents an enumeration value type with predefined options"},"v1ValueEnumTypeMember":{"type":"object","properties":{"name":{"type":"string","title":"The programmatic name of this enum member"},"description":{"type":"string","title":"Optional human-readable description of this enum member"}},"title":"Represents a single member/option within an enum value type"},"v1ValueGenericDictionaryType":{"type":"object","properties":{"key_type":{"$ref":"#/components/schemas/v1ValueType"},"value_type":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represent a generic dictionary that can hold any entry of a particular key and value type"},"v1CodeMapping":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1CodeMappingEntry"},"description":"List of mapping entries that associate SPy code regions with English code regions.\nEach entry defines a paired relationship between a span in the SPy code and\na span in the English code representation."}},"description":"CodeMapping represents a bidirectional mapping between SPy (Subset-of-Python) code\nand English code locations within an automation. This mapping enables navigation between\nthe two representations, facilitating debugging, traceability, and synchronized editing.\nEach entry in the mapping associates a region in the SPy code with its corresponding\nregion in the English code. The mapping relationship is many-to-many and entries may\noverlap.","required":["entries"]},"v1CodeMappingEntry":{"type":"object","properties":{"spy_location":{"$ref":"#/components/schemas/commonV1Location"},"english_location":{"$ref":"#/components/schemas/commonV1Location"}},"description":"CodeMappingEntry represents a single mapping between a region in SPy code and\nits corresponding region in English code. This bidirectional association allows\nnavigation from SPy to English and vice versa, enabling synchronized views and\ndebugging across both representations of the automation logic.","required":["spy_location","english_location"]},"commonV1Location":{"type":"object","properties":{"start_byte":{"type":"string","format":"int64","title":"Starting Byte of the span, It will be zero-based"},"end_byte":{"type":"string","format":"int64","title":"Ending Byte(exclusive) of the span, It will be zero-based"}},"description":"Location represents a generic span within some underlying content.\nIt specifies the starting byte offset and the ending byte offset (exclusive) of the span.\nThis can be used for pointing to regions in files, buffers, logs, messages,\nor any other byte-addressable resource."},"v1AutomationActivationState":{"type":"string","enum":["AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","AUTOMATION_ACTIVATION_STATE_ACTIVE","AUTOMATION_ACTIVATION_STATE_DEACTIVATED"],"default":"AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","description":"Activation state of a published automation.\nControls whether the automation can execute published runs.\n\n - AUTOMATION_ACTIVATION_STATE_UNSPECIFIED: Unspecified state. Used when automation has no published version.\nActivation state is only meaningful after publishing.\n - AUTOMATION_ACTIVATION_STATE_ACTIVE: Automation is active and can execute published runs.\n - AUTOMATION_ACTIVATION_STATE_DEACTIVATED: Automation is deactivated and cannot execute published runs.\nEvents will be logged but not executed."},"commonV1Value":{"type":"object","properties":{"null_value":{"type":"string","title":"Represents the absence of a value (None/null/undefined)"},"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"},"duration":{"type":"string","title":"Signed duration representing a span of time"},"list":{"$ref":"#/components/schemas/v1List"},"dictionary":{"$ref":"#/components/schemas/v1Dictionary"},"file":{"$ref":"#/components/schemas/v1FileValue"},"table":{"$ref":"#/components/schemas/v1TableValue"},"set":{"$ref":"#/components/schemas/v1Set"}},"description":"Represents a runtime value that can be produced by the Jarvis interpreter.\n\nThis message provides a type-safe way to serialize and transmit values between\nthe Jarvis interpreter and other services via gRPC. It supports all the basic\ndata types that can be represented in the Jarvis language runtime.\n\nThe oneof structure ensures that exactly one value type is set at a time,\nproviding both type safety and efficient serialization."},"v1Number":{"type":"object","properties":{"lo":{"type":"integer","format":"int64","description":"Low 32 bits of the 96-bit mantissa."},"mid":{"type":"integer","format":"int64","description":"Middle 32 bits of the 96-bit mantissa."},"hi":{"type":"integer","format":"int64","description":"High 32 bits of the 96-bit mantissa."},"flags":{"type":"integer","format":"int64","description":"Flags word:\n - Bits 16–23: scale (0–28)\n - Bit 31: sign (0 = positive, 1 = negative)\n - Other bits must be zero."}},"description":"A fixed-precision decimal number with up to 28 fractional digits.\n\nThis message represents decimal numbers with exact precision, avoiding\nfloating-point rounding errors. It's particularly useful for financial\ncalculations, measurements, and any scenario where exact decimal\nrepresentation is required.\n\nThe value is calculated as: m / 10^e, where:\n - m is an unsigned 96-bit integer composed of (lo, mid, hi)\n - e is the scale (0–28) stored in flags bits 16–23\n - sign is encoded in flags bit 31 (0 = positive, 1 = negative)\n\nExamples:\n - 123.45 would have m=12345, e=2\n - -0.001 would have m=1, e=3, with sign bit set\n"},"typeDate":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year."},"month":{"type":"integer","format":"int32","description":"Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day."},"day":{"type":"integer","format":"int32","description":"Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant."}},"description":"* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.","title":"Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:"},"typeTimeOfDay":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","description":"Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time."},"minutes":{"type":"integer","format":"int32","description":"Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."}},"description":"Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`."},"typeDateTime":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a\ndatetime without a year."},"month":{"type":"integer","format":"int32","description":"Required. Month of year. Must be from 1 to 12."},"day":{"type":"integer","format":"int32","description":"Required. Day of month. Must be from 1 to 31 and valid for the year and\nmonth."},"hours":{"type":"integer","format":"int32","description":"Required. Hours of day in 24 hour format. Should be from 0 to 23. An API\nmay choose to allow the value \"24:00:00\" for scenarios like business\nclosing time."},"minutes":{"type":"integer","format":"int32","description":"Required. Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Required. Seconds of minutes of the time. Must normally be from 0 to 59. An\nAPI may allow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Required. Fractions of seconds in nanoseconds. Must be from 0 to\n999,999,999."},"utc_offset":{"type":"string","description":"UTC offset. Must be whole seconds, between -18 hours and +18 hours.\nFor example, a UTC offset of -4:00 would be represented as\n{ seconds: -14400 }."},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"}},"description":"Represents civil time (or occasionally physical time).\n\nThis type can represent a civil time in one of a few possible ways:\n\n * When utc_offset is set and time_zone is unset: a civil time on a calendar\n   day with a particular offset from UTC.\n * When time_zone is set and utc_offset is unset: a civil time on a calendar\n   day in a particular time zone.\n * When neither time_zone nor utc_offset is set: a civil time on a calendar\n   day in local time.\n\nThe date is relative to the Proleptic Gregorian Calendar.\n\nIf year is 0, the DateTime is considered not to have a specific year. month\nand day must have valid, non-zero values.\n\nThis type may also be used to represent a physical time if all the date and\ntime fields are set and either case of the `time_offset` oneof is set.\nConsider using `Timestamp` message for physical time instead. If your use\ncase also would like to store the user's timezone, that can be done in\nanother field.\n\nThis type is more flexible than some applications may want. Make sure to\ndocument and validate your application's limitations."},"typeTimeZone":{"type":"object","properties":{"id":{"type":"string","description":"IANA Time Zone Database time zone, e.g. \"America/New_York\"."},"version":{"type":"string","description":"Optional. IANA Time Zone Database version number, e.g. \"2019a\"."}},"description":"Represents a time zone from the\n[IANA Time Zone Database](https://www.iana.org/time-zones)."},"v1List":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/commonV1Value"},"title":"The ordered sequence of values in this list"}},"description":"Represents an ordered collection of values (similar to arrays or lists).\n\nThis message can contain any number of Value elements in a specific order.\nLists are mutable and can grow or shrink during runtime. Elements can be\naccessed by their zero-based index position.\n\nExamples:\n - [1, 2, 3] - list of numbers\n - [\"hello\", \"world\"] - list of strings\n - [true, 42, \"mixed\"] - list with mixed types\n - [[1, 2], [3, 4]] - nested lists"},"v1Dictionary":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryEntry"},"title":"The key-value pairs stored in this dictionary"}},"description":"Represents a key-value mapping (similar to hash maps or dictionaries).\n\nThis message stores associations between keys and values, where keys must be\nhashable types (null, bool, Number, string, Date, TimeOfDay, DateTime, TimeZone). Keys are\nunique within a dictionary - duplicate keys will overwrite previous values.\n\nThe dictionary maintains insertion order for consistent iteration behavior.\n\nExamples:\n - {\"name\": \"John\", \"age\": 30} - string keys with mixed values\n - {1: \"one\", 2: \"two\"} - number keys with string values\n - {\"nested\": {\"inner\": \"value\"}} - nested dictionaries"},"v1DictionaryEntry":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/v1HashableValue"},"value":{"$ref":"#/components/schemas/commonV1Value"}},"description":"Represents a single key-value pair within a Dictionary.\n\nBoth key and value can be any Value type, though keys should be\nhashable types for proper dictionary behavior. Non-hashable keys\n(like lists or dictionaries) may cause runtime errors."},"v1HashableValue":{"type":"object","properties":{"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"duration":{"type":"string","title":"Signed duration representing a span of time"}},"description":"Represents a hashable value that can be used as a dictionary key.\n\nThis message contains only the hashable types from the Value message,\ncorresponding to Python's hashable types. These types can be safely\nused as keys in maps and dictionaries.\n\nHashable types include: bool, Number, string, Date, TimeOfDay, DateTime\nand Duration."},"v1FileValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1File"}},"title":"A file value represents a file that can be either inline or remote"},"v1File":{"type":"object","properties":{"file_name":{"type":"string","title":"The name of the file"},"content":{"type":"string","format":"byte","title":"Content of the file as a byte stream"}}},"v1TableValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1Table"}},"title":"A table that is represented remote as an URL to a file that is Feather-formatted\nor inline via the Table message"},"v1Table":{"type":"object","properties":{"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1Column"}}},"description":"A table is a column-oriented structure. All the values inside each column must\nbe of equal length."},"v1Column":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"}},"name":{"type":"string"}}},"bdkV1Value":{"type":"object","properties":{"null_value":{"type":"string"},"conceptual_value":{"$ref":"#/components/schemas/v1NounPhrase"},"text_value":{"type":"string"},"number_value":{"type":"number","format":"double"},"boolean_value":{"type":"boolean"},"datetime_value":{"type":"string","format":"date-time"},"date_value":{"$ref":"#/components/schemas/v1Date"},"time_value":{"$ref":"#/components/schemas/v1Time"},"file_value":{"$ref":"#/components/schemas/v1FileValue"},"dictionary_value":{"$ref":"#/components/schemas/v1DictionaryValue"},"list_value":{"$ref":"#/components/schemas/bdkV1ListValue"},"opaque_value":{"$ref":"#/components/schemas/v1OpaqueValue"},"table_value":{"$ref":"#/components/schemas/v1TableValue"},"sensitive_value":{"$ref":"#/components/schemas/v1SensitiveValue"}},"title":"A union of all possible values"},"v1NounPhrase":{"type":"object","properties":{"modifiers":{"type":"array","items":{"type":"string"},"title":"Optional adjectives attached to the noun"},"head":{"type":"string","title":"Noun of the phrase"}}},"v1Date":{"type":"object","properties":{"year":{"type":"integer","format":"int32","title":"Year of the date"},"month":{"type":"integer","format":"int32","title":"Month of a year"},"day":{"type":"integer","format":"int32","title":"Day of a month"}}},"v1Time":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","title":"Hours of day"},"minutes":{"type":"integer","format":"int32","title":"Minutes of hour of day"},"seconds":{"type":"integer","format":"int32","title":"Seconds of minutes of the time"},"nanos":{"type":"integer","format":"int32","title":"Fractions of seconds in nanoseconds"}}},"v1DictionaryValue":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryValueField"},"title":"All the fields alongside their values in the dictionary"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the dictionary"}},"title":"Value to be used when the type is dictionary"},"v1DictionaryValueField":{"type":"object","properties":{"key":{"type":"string"},"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"Each key-value pair inside a dictionary"},"bdkV1ListValue":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"},"title":"All the values inside the list"}},"title":"A collection of values"},"v1OpaqueValue":{"type":"object","properties":{"content":{"type":"string","format":"byte","title":"Content of the opaque value"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the opaque"}}},"v1SensitiveValue":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"A sensitive value is any value marked as sensitive (to prevent exposure)"},"v1Set":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/v1HashableValue"},"title":"The unique elements stored in this set\nAll elements must be hashable types"}},"description":"Represents an unordered collection of unique values.\n\nThis message stores a collection of unique elements, where duplicate values\nare automatically removed. Only hashable types can be stored in sets.\nSets are useful for membership testing, removing duplicates, and mathematical\nset operations like union, intersection, and difference.\n\nThe set does not maintain insertion order - elements may appear in any order\nduring iteration.\n\nExamples:\n - {1, 2, 3} - set of numbers\n - {\"apple\", \"banana\", \"cherry\"} - set of strings\n - {true, false} - set of booleans\n - {1, \"hello\", true} - set with mixed hashable types"},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}/revisions/{revision_id}":{"get":{"summary":"Get Automation Revision","operationId":"GetAutomationRevision","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1AutomationRevision"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"revision_id","in":"path","required":true,"schema":{"type":"string"}}],"tags":["Automations"]}}}}
```

## GET /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations/{automation\_id}/revisions

> List Automation Revisions

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1ListAutomationRevisionsResponse":{"type":"object","properties":{"revisions":{"type":"array","items":{"$ref":"#/components/schemas/v1AutomationRevision"},"description":"The list of automation revisions for the current page.\nRevisions are ordered in reverse chronological order (newest first)."},"next_page_token":{"type":"string","description":"A token that can be sent as `page_token` to retrieve the next page.\nIf this field is omitted, there are no subsequent pages."}},"description":"ListAutomationRevisionsResponse returns a page of automation revisions and pagination information."},"v1AutomationRevision":{"type":"object","properties":{"name":{"type":"string","description":"The name of the automation revision.\nFormat: organizations/{organization}/workspaces/{workspace}/automations/{automation}/revisions/{revision}\nThe revision ID is the semantic version string (e.g., \"0.1\", \"1.0\", \"2.0\")."},"snapshot":{"$ref":"#/components/schemas/v1Automation"},"create_time":{"type":"string","format":"date-time","description":"Timestamp when this revision was created.","readOnly":true},"alternate_ids":{"type":"array","items":{"type":"string"},"description":"Other revision IDs that reference the same snapshot (e.g., \"latest\").\nPer AIP-162, this allows aliases for revisions.","readOnly":true}},"description":"AutomationRevision represents a historical revision (version) of an automation.\nRevisions are immutable snapshots created each time an automation is updated.\nPer AIP-162, this resource contains the complete state via a snapshot field."},"v1Automation":{"type":"object","properties":{"name":{"type":"string","title":"The automation name (e.g. 'automations/{automation}')"},"display_name":{"type":"string","description":"Human-readable name of the automation for identification and display.\nMust be unique within the user's namespace."},"english_code":{"type":"string","description":"User-facing English description code that explains what the automation does.\nThis is a human-readable representation of the automation's purpose and logic."},"code":{"type":"string","description":"SPy (Subset-of Python) executable code that defines the automation logic.\nThis code is executed when the automation is invoked with inputs."},"artifacts":{"type":"object","additionalProperties":{"type":"string","format":"byte"},"description":"Additional artifacts associated with the automation (e.g., data files, configurations).\nKeys are artifact names, values are the binary content of the artifacts.\nThese artifacts are available to the automation during execution."},"create_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was originally created.\nThis value never changes after creation.","readOnly":true},"version":{"type":"string","title":"Semantic version of this specific version of the automation (format: major.minor).\nIncremented each time the automation is updated or published.\nExamples: \"0.1\", \"1.0\", \"1.1\", \"2.0\"","readOnly":true},"connections":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v1BookConnection"},"description":"Book connections required by this automation for execution.\nMaps connection names to their metadata.\nThese connections are resolved and made available during automation execution."},"update_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last updated.\nUpdated whenever the automation metadata, code, or dependencies change.","readOnly":true},"update_user_id":{"type":"string","description":"The ID of the user who last updated this automation.","readOnly":true},"delete_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was deleted.","readOnly":true},"purge_time":{"type":"string","format":"date-time","description":"Timestamp when the automation will be purged.","readOnly":true},"input_specs":{"type":"array","items":{"$ref":"#/components/schemas/v1AutomationInputSpec"},"description":"List of input specifications that define the parameters this automation accepts.\nThese specifications describe the expected inputs when the automation is executed."},"description":{"type":"string","description":"Provides additional context and documentation about the automation's purpose and behavior."},"latest_published_version":{"type":"string","title":"Semantic version of the latest published version of the automation (format: major.minor).\nIt will be null in case of no published version.\nExamples: \"0.1\", \"1.0\", \"2.0\"","readOnly":true},"author_id":{"type":"string","description":"The ID of the user who created this automation.","readOnly":true},"code_mapping":{"$ref":"#/components/schemas/v1CodeMapping"},"restore_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was restored from a previous version.\nOnly populated if the automation has been restored.","readOnly":true},"restore_version":{"type":"string","description":"The version string this automation was restored from (e.g., \"1.0\", \"2.1\").\nOnly populated if the automation has been restored.","readOnly":true},"restore_user_id":{"type":"string","description":"The ID of the user who restored this automation.\nOnly populated if the automation has been restored.","readOnly":true},"publish_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last published.\nOnly populated if the automation has been published.","readOnly":true},"publish_user_id":{"type":"string","description":"The ID of the user who last published this automation.\nOnly populated if the automation has been published.","readOnly":true},"activation_state":{"$ref":"#/components/schemas/v1AutomationActivationState"},"default_inputs":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/commonV1Value"},"description":"Default input values for this automation.\nKeys are input parameter names (matching AutomationInputSpec.name),\nvalues are the default values to use when inputs are not explicitly provided.\nThese are used to pre-populate inputs for manual runs and fill missing inputs\nfor trigger-based invocations.","readOnly":true},"marked_outputs":{"type":"array","items":{"type":"string"},"description":"List of output keys that have been marked by the user.\nThese keys identify specific outputs from the automation execution."}},"description":"Automation represents a unit of executable code with associated metadata and dependencies.\nAutomations can be in DRAFT or PUBLISHED state, where drafts can be modified and\npublished automations are immutable and executable.\nAutomation IDs are unique nano ID strings (21 characters, URL-safe: A-Za-z0-9_-).","required":["display_name"]},"v1BookConnection":{"type":"object","properties":{"connection_id":{"type":"string","description":"Unique identifier for this connection resource."},"endpoint":{"type":"string","description":"Endpoint for the connection."}},"description":"BookConnection is a resource representing a connection to a book instance.\nA connection has a unique identifier and an endpoint."},"v1AutomationInputSpec":{"type":"object","properties":{"name":{"type":"string","description":"The name of the input parameter."},"type":{"$ref":"#/components/schemas/v1ValueType"}},"description":"AutomationInputSpec defines the specification for an input parameter of an automation.","required":["name"]},"v1ValueType":{"type":"object","properties":{"scalar_type":{"$ref":"#/components/schemas/v1ValueScalarType"},"optional_type":{"$ref":"#/components/schemas/v1ValueOptionalType"},"list_type":{"$ref":"#/components/schemas/v1ValueListType"},"dictionary_type":{"$ref":"#/components/schemas/v1ValueDictionaryType"},"table_type":{"$ref":"#/components/schemas/v1ValueTableType"},"opaque_type":{"$ref":"#/components/schemas/v1ValueOpaqueType"},"any_type":{"$ref":"#/components/schemas/v1ValueAnyType"},"union_type":{"$ref":"#/components/schemas/v1ValueUnionType"},"sensitive_type":{"$ref":"#/components/schemas/v1ValueSensitiveType"},"enum_type":{"$ref":"#/components/schemas/v1ValueEnumType"},"generic_dictionary_type":{"$ref":"#/components/schemas/v1ValueGenericDictionaryType"}},"title":"Represents a complete value type definition using a discriminated union"},"v1ValueScalarType":{"type":"string","enum":["VALUE_SCALAR_TYPE_UNSPECIFIED","VALUE_SCALAR_TYPE_TEXT","VALUE_SCALAR_TYPE_NUMBER","VALUE_SCALAR_TYPE_BOOLEAN","VALUE_SCALAR_TYPE_DATETIME","VALUE_SCALAR_TYPE_DATE","VALUE_SCALAR_TYPE_TIME","VALUE_SCALAR_TYPE_FILE"],"default":"VALUE_SCALAR_TYPE_UNSPECIFIED","description":"- VALUE_SCALAR_TYPE_UNSPECIFIED: Unspecified value type\n - VALUE_SCALAR_TYPE_TEXT: A text value type\n - VALUE_SCALAR_TYPE_NUMBER: A number value type\n - VALUE_SCALAR_TYPE_BOOLEAN: A boolean value type\n - VALUE_SCALAR_TYPE_DATETIME: A datetime value type\n - VALUE_SCALAR_TYPE_DATE: A date value type\n - VALUE_SCALAR_TYPE_TIME: A time value type\n - VALUE_SCALAR_TYPE_FILE: A file value type","title":"Supported Value Scalar Types"},"v1ValueOptionalType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that can be optional (nullable)"},"v1ValueListType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a list/array value type containing elements of a specific type"},"v1ValueDictionaryType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this dictionary represents"},"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueDictionaryTypeField"},"title":"The named fields contained in this dictionary"},"description":{"type":"string","title":"Optional human-readable description of this dictionary type"}},"title":"Represents a dictionary/object value type with named fields"},"v1ValueDictionaryTypeField":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this field"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this field"}},"title":"Represents a single field within a dictionary value type"},"v1ValueTableType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this table represents"},"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueTableTypeColumn"},"title":"The columns that make up this table"},"description":{"type":"string","title":"Optional human-readable description of this table type"}},"title":"Represents a table value type with structured columns"},"v1ValueTableTypeColumn":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this column"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this column"}},"title":"Represents a single column within a table value type"},"v1ValueOpaqueType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this opaque type represents"},"description":{"type":"string","title":"Optional human-readable description of this opaque type"}},"title":"Represents an opaque value type with semantic meaning but unknown internal structure"},"v1ValueAnyType":{"type":"object","title":"Represents a value type that can hold any kind of value"},"v1ValueUnionType":{"type":"object","properties":{"inners":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueType"},"title":"The possible value types in this union"}},"title":"Represents a union value type that can be one of several possible types"},"v1ValueSensitiveType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that contains sensitive information"},"v1ValueEnumType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this enum represents"},"members":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueEnumTypeMember"},"title":"The available options/members of this enum"},"description":{"type":"string","title":"Optional human-readable description of this enum type"}},"title":"Represents an enumeration value type with predefined options"},"v1ValueEnumTypeMember":{"type":"object","properties":{"name":{"type":"string","title":"The programmatic name of this enum member"},"description":{"type":"string","title":"Optional human-readable description of this enum member"}},"title":"Represents a single member/option within an enum value type"},"v1ValueGenericDictionaryType":{"type":"object","properties":{"key_type":{"$ref":"#/components/schemas/v1ValueType"},"value_type":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represent a generic dictionary that can hold any entry of a particular key and value type"},"v1CodeMapping":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1CodeMappingEntry"},"description":"List of mapping entries that associate SPy code regions with English code regions.\nEach entry defines a paired relationship between a span in the SPy code and\na span in the English code representation."}},"description":"CodeMapping represents a bidirectional mapping between SPy (Subset-of-Python) code\nand English code locations within an automation. This mapping enables navigation between\nthe two representations, facilitating debugging, traceability, and synchronized editing.\nEach entry in the mapping associates a region in the SPy code with its corresponding\nregion in the English code. The mapping relationship is many-to-many and entries may\noverlap.","required":["entries"]},"v1CodeMappingEntry":{"type":"object","properties":{"spy_location":{"$ref":"#/components/schemas/commonV1Location"},"english_location":{"$ref":"#/components/schemas/commonV1Location"}},"description":"CodeMappingEntry represents a single mapping between a region in SPy code and\nits corresponding region in English code. This bidirectional association allows\nnavigation from SPy to English and vice versa, enabling synchronized views and\ndebugging across both representations of the automation logic.","required":["spy_location","english_location"]},"commonV1Location":{"type":"object","properties":{"start_byte":{"type":"string","format":"int64","title":"Starting Byte of the span, It will be zero-based"},"end_byte":{"type":"string","format":"int64","title":"Ending Byte(exclusive) of the span, It will be zero-based"}},"description":"Location represents a generic span within some underlying content.\nIt specifies the starting byte offset and the ending byte offset (exclusive) of the span.\nThis can be used for pointing to regions in files, buffers, logs, messages,\nor any other byte-addressable resource."},"v1AutomationActivationState":{"type":"string","enum":["AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","AUTOMATION_ACTIVATION_STATE_ACTIVE","AUTOMATION_ACTIVATION_STATE_DEACTIVATED"],"default":"AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","description":"Activation state of a published automation.\nControls whether the automation can execute published runs.\n\n - AUTOMATION_ACTIVATION_STATE_UNSPECIFIED: Unspecified state. Used when automation has no published version.\nActivation state is only meaningful after publishing.\n - AUTOMATION_ACTIVATION_STATE_ACTIVE: Automation is active and can execute published runs.\n - AUTOMATION_ACTIVATION_STATE_DEACTIVATED: Automation is deactivated and cannot execute published runs.\nEvents will be logged but not executed."},"commonV1Value":{"type":"object","properties":{"null_value":{"type":"string","title":"Represents the absence of a value (None/null/undefined)"},"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"},"duration":{"type":"string","title":"Signed duration representing a span of time"},"list":{"$ref":"#/components/schemas/v1List"},"dictionary":{"$ref":"#/components/schemas/v1Dictionary"},"file":{"$ref":"#/components/schemas/v1FileValue"},"table":{"$ref":"#/components/schemas/v1TableValue"},"set":{"$ref":"#/components/schemas/v1Set"}},"description":"Represents a runtime value that can be produced by the Jarvis interpreter.\n\nThis message provides a type-safe way to serialize and transmit values between\nthe Jarvis interpreter and other services via gRPC. It supports all the basic\ndata types that can be represented in the Jarvis language runtime.\n\nThe oneof structure ensures that exactly one value type is set at a time,\nproviding both type safety and efficient serialization."},"v1Number":{"type":"object","properties":{"lo":{"type":"integer","format":"int64","description":"Low 32 bits of the 96-bit mantissa."},"mid":{"type":"integer","format":"int64","description":"Middle 32 bits of the 96-bit mantissa."},"hi":{"type":"integer","format":"int64","description":"High 32 bits of the 96-bit mantissa."},"flags":{"type":"integer","format":"int64","description":"Flags word:\n - Bits 16–23: scale (0–28)\n - Bit 31: sign (0 = positive, 1 = negative)\n - Other bits must be zero."}},"description":"A fixed-precision decimal number with up to 28 fractional digits.\n\nThis message represents decimal numbers with exact precision, avoiding\nfloating-point rounding errors. It's particularly useful for financial\ncalculations, measurements, and any scenario where exact decimal\nrepresentation is required.\n\nThe value is calculated as: m / 10^e, where:\n - m is an unsigned 96-bit integer composed of (lo, mid, hi)\n - e is the scale (0–28) stored in flags bits 16–23\n - sign is encoded in flags bit 31 (0 = positive, 1 = negative)\n\nExamples:\n - 123.45 would have m=12345, e=2\n - -0.001 would have m=1, e=3, with sign bit set\n"},"typeDate":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year."},"month":{"type":"integer","format":"int32","description":"Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day."},"day":{"type":"integer","format":"int32","description":"Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant."}},"description":"* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.","title":"Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:"},"typeTimeOfDay":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","description":"Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time."},"minutes":{"type":"integer","format":"int32","description":"Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."}},"description":"Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`."},"typeDateTime":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a\ndatetime without a year."},"month":{"type":"integer","format":"int32","description":"Required. Month of year. Must be from 1 to 12."},"day":{"type":"integer","format":"int32","description":"Required. Day of month. Must be from 1 to 31 and valid for the year and\nmonth."},"hours":{"type":"integer","format":"int32","description":"Required. Hours of day in 24 hour format. Should be from 0 to 23. An API\nmay choose to allow the value \"24:00:00\" for scenarios like business\nclosing time."},"minutes":{"type":"integer","format":"int32","description":"Required. Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Required. Seconds of minutes of the time. Must normally be from 0 to 59. An\nAPI may allow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Required. Fractions of seconds in nanoseconds. Must be from 0 to\n999,999,999."},"utc_offset":{"type":"string","description":"UTC offset. Must be whole seconds, between -18 hours and +18 hours.\nFor example, a UTC offset of -4:00 would be represented as\n{ seconds: -14400 }."},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"}},"description":"Represents civil time (or occasionally physical time).\n\nThis type can represent a civil time in one of a few possible ways:\n\n * When utc_offset is set and time_zone is unset: a civil time on a calendar\n   day with a particular offset from UTC.\n * When time_zone is set and utc_offset is unset: a civil time on a calendar\n   day in a particular time zone.\n * When neither time_zone nor utc_offset is set: a civil time on a calendar\n   day in local time.\n\nThe date is relative to the Proleptic Gregorian Calendar.\n\nIf year is 0, the DateTime is considered not to have a specific year. month\nand day must have valid, non-zero values.\n\nThis type may also be used to represent a physical time if all the date and\ntime fields are set and either case of the `time_offset` oneof is set.\nConsider using `Timestamp` message for physical time instead. If your use\ncase also would like to store the user's timezone, that can be done in\nanother field.\n\nThis type is more flexible than some applications may want. Make sure to\ndocument and validate your application's limitations."},"typeTimeZone":{"type":"object","properties":{"id":{"type":"string","description":"IANA Time Zone Database time zone, e.g. \"America/New_York\"."},"version":{"type":"string","description":"Optional. IANA Time Zone Database version number, e.g. \"2019a\"."}},"description":"Represents a time zone from the\n[IANA Time Zone Database](https://www.iana.org/time-zones)."},"v1List":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/commonV1Value"},"title":"The ordered sequence of values in this list"}},"description":"Represents an ordered collection of values (similar to arrays or lists).\n\nThis message can contain any number of Value elements in a specific order.\nLists are mutable and can grow or shrink during runtime. Elements can be\naccessed by their zero-based index position.\n\nExamples:\n - [1, 2, 3] - list of numbers\n - [\"hello\", \"world\"] - list of strings\n - [true, 42, \"mixed\"] - list with mixed types\n - [[1, 2], [3, 4]] - nested lists"},"v1Dictionary":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryEntry"},"title":"The key-value pairs stored in this dictionary"}},"description":"Represents a key-value mapping (similar to hash maps or dictionaries).\n\nThis message stores associations between keys and values, where keys must be\nhashable types (null, bool, Number, string, Date, TimeOfDay, DateTime, TimeZone). Keys are\nunique within a dictionary - duplicate keys will overwrite previous values.\n\nThe dictionary maintains insertion order for consistent iteration behavior.\n\nExamples:\n - {\"name\": \"John\", \"age\": 30} - string keys with mixed values\n - {1: \"one\", 2: \"two\"} - number keys with string values\n - {\"nested\": {\"inner\": \"value\"}} - nested dictionaries"},"v1DictionaryEntry":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/v1HashableValue"},"value":{"$ref":"#/components/schemas/commonV1Value"}},"description":"Represents a single key-value pair within a Dictionary.\n\nBoth key and value can be any Value type, though keys should be\nhashable types for proper dictionary behavior. Non-hashable keys\n(like lists or dictionaries) may cause runtime errors."},"v1HashableValue":{"type":"object","properties":{"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"duration":{"type":"string","title":"Signed duration representing a span of time"}},"description":"Represents a hashable value that can be used as a dictionary key.\n\nThis message contains only the hashable types from the Value message,\ncorresponding to Python's hashable types. These types can be safely\nused as keys in maps and dictionaries.\n\nHashable types include: bool, Number, string, Date, TimeOfDay, DateTime\nand Duration."},"v1FileValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1File"}},"title":"A file value represents a file that can be either inline or remote"},"v1File":{"type":"object","properties":{"file_name":{"type":"string","title":"The name of the file"},"content":{"type":"string","format":"byte","title":"Content of the file as a byte stream"}}},"v1TableValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1Table"}},"title":"A table that is represented remote as an URL to a file that is Feather-formatted\nor inline via the Table message"},"v1Table":{"type":"object","properties":{"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1Column"}}},"description":"A table is a column-oriented structure. All the values inside each column must\nbe of equal length."},"v1Column":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"}},"name":{"type":"string"}}},"bdkV1Value":{"type":"object","properties":{"null_value":{"type":"string"},"conceptual_value":{"$ref":"#/components/schemas/v1NounPhrase"},"text_value":{"type":"string"},"number_value":{"type":"number","format":"double"},"boolean_value":{"type":"boolean"},"datetime_value":{"type":"string","format":"date-time"},"date_value":{"$ref":"#/components/schemas/v1Date"},"time_value":{"$ref":"#/components/schemas/v1Time"},"file_value":{"$ref":"#/components/schemas/v1FileValue"},"dictionary_value":{"$ref":"#/components/schemas/v1DictionaryValue"},"list_value":{"$ref":"#/components/schemas/bdkV1ListValue"},"opaque_value":{"$ref":"#/components/schemas/v1OpaqueValue"},"table_value":{"$ref":"#/components/schemas/v1TableValue"},"sensitive_value":{"$ref":"#/components/schemas/v1SensitiveValue"}},"title":"A union of all possible values"},"v1NounPhrase":{"type":"object","properties":{"modifiers":{"type":"array","items":{"type":"string"},"title":"Optional adjectives attached to the noun"},"head":{"type":"string","title":"Noun of the phrase"}}},"v1Date":{"type":"object","properties":{"year":{"type":"integer","format":"int32","title":"Year of the date"},"month":{"type":"integer","format":"int32","title":"Month of a year"},"day":{"type":"integer","format":"int32","title":"Day of a month"}}},"v1Time":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","title":"Hours of day"},"minutes":{"type":"integer","format":"int32","title":"Minutes of hour of day"},"seconds":{"type":"integer","format":"int32","title":"Seconds of minutes of the time"},"nanos":{"type":"integer","format":"int32","title":"Fractions of seconds in nanoseconds"}}},"v1DictionaryValue":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryValueField"},"title":"All the fields alongside their values in the dictionary"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the dictionary"}},"title":"Value to be used when the type is dictionary"},"v1DictionaryValueField":{"type":"object","properties":{"key":{"type":"string"},"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"Each key-value pair inside a dictionary"},"bdkV1ListValue":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"},"title":"All the values inside the list"}},"title":"A collection of values"},"v1OpaqueValue":{"type":"object","properties":{"content":{"type":"string","format":"byte","title":"Content of the opaque value"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the opaque"}}},"v1SensitiveValue":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"A sensitive value is any value marked as sensitive (to prevent exposure)"},"v1Set":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/v1HashableValue"},"title":"The unique elements stored in this set\nAll elements must be hashable types"}},"description":"Represents an unordered collection of unique values.\n\nThis message stores a collection of unique elements, where duplicate values\nare automatically removed. Only hashable types can be stored in sets.\nSets are useful for membership testing, removing duplicates, and mathematical\nset operations like union, intersection, and difference.\n\nThe set does not maintain insertion order - elements may appear in any order\nduring iteration.\n\nExamples:\n - {1, 2, 3} - set of numbers\n - {\"apple\", \"banana\", \"cherry\"} - set of strings\n - {true, false} - set of booleans\n - {1, \"hello\", true} - set with mixed hashable types"},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}/revisions":{"get":{"summary":"List Automation Revisions","operationId":"ListAutomationRevisions","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1ListAutomationRevisionsResponse"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"page_size","description":"The maximum number of revisions to return in a single response.\nThe service may return fewer than this value.\nIf unspecified, at most 50 revisions will be returned.\nThe maximum value is 1000; values above 1000 will be coerced to 1000.","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"page_token","description":"A page token received from a previous `ListAutomationRevisions` call.\nProvide this to retrieve the subsequent page of results.","in":"query","required":false,"schema":{"type":"string"}},{"name":"filter","description":"Filter expression to restrict results. Per AIP-160, this should be a\nfiltering expression following the Common Expression Language (CEL) syntax.\n\nSupported fields for filtering:\n  - `stage`: The automation revision stage (e.g., DRAFT, PUBLISHED)\n\nExample filters:\n  - `stage = \"DRAFT\"` - Returns only draft revisions\n  - `stage = \"PUBLISHED\"` - Returns only published revisions\n\nIf not specified or passed null, all revisions will be returned for that automation.","in":"query","required":false,"schema":{"type":"string"}}],"tags":["Automations"]}}}}
```

## GET /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations

> List Automations

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1ListAutomationsResponse":{"type":"object","properties":{"automations":{"type":"array","items":{"$ref":"#/components/schemas/v1Automation"},"description":"The list of automations for the current page.\nMay be empty if no automations match the request criteria."},"next_page_token":{"type":"string","description":"A token that can be sent as `page_token` to retrieve the next page.\nIf this field is omitted, there are no subsequent pages."}},"description":"ListAutomationsResponse returns a page of automations and pagination information."},"v1Automation":{"type":"object","properties":{"name":{"type":"string","title":"The automation name (e.g. 'automations/{automation}')"},"display_name":{"type":"string","description":"Human-readable name of the automation for identification and display.\nMust be unique within the user's namespace."},"english_code":{"type":"string","description":"User-facing English description code that explains what the automation does.\nThis is a human-readable representation of the automation's purpose and logic."},"code":{"type":"string","description":"SPy (Subset-of Python) executable code that defines the automation logic.\nThis code is executed when the automation is invoked with inputs."},"artifacts":{"type":"object","additionalProperties":{"type":"string","format":"byte"},"description":"Additional artifacts associated with the automation (e.g., data files, configurations).\nKeys are artifact names, values are the binary content of the artifacts.\nThese artifacts are available to the automation during execution."},"create_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was originally created.\nThis value never changes after creation.","readOnly":true},"version":{"type":"string","title":"Semantic version of this specific version of the automation (format: major.minor).\nIncremented each time the automation is updated or published.\nExamples: \"0.1\", \"1.0\", \"1.1\", \"2.0\"","readOnly":true},"connections":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v1BookConnection"},"description":"Book connections required by this automation for execution.\nMaps connection names to their metadata.\nThese connections are resolved and made available during automation execution."},"update_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last updated.\nUpdated whenever the automation metadata, code, or dependencies change.","readOnly":true},"update_user_id":{"type":"string","description":"The ID of the user who last updated this automation.","readOnly":true},"delete_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was deleted.","readOnly":true},"purge_time":{"type":"string","format":"date-time","description":"Timestamp when the automation will be purged.","readOnly":true},"input_specs":{"type":"array","items":{"$ref":"#/components/schemas/v1AutomationInputSpec"},"description":"List of input specifications that define the parameters this automation accepts.\nThese specifications describe the expected inputs when the automation is executed."},"description":{"type":"string","description":"Provides additional context and documentation about the automation's purpose and behavior."},"latest_published_version":{"type":"string","title":"Semantic version of the latest published version of the automation (format: major.minor).\nIt will be null in case of no published version.\nExamples: \"0.1\", \"1.0\", \"2.0\"","readOnly":true},"author_id":{"type":"string","description":"The ID of the user who created this automation.","readOnly":true},"code_mapping":{"$ref":"#/components/schemas/v1CodeMapping"},"restore_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was restored from a previous version.\nOnly populated if the automation has been restored.","readOnly":true},"restore_version":{"type":"string","description":"The version string this automation was restored from (e.g., \"1.0\", \"2.1\").\nOnly populated if the automation has been restored.","readOnly":true},"restore_user_id":{"type":"string","description":"The ID of the user who restored this automation.\nOnly populated if the automation has been restored.","readOnly":true},"publish_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last published.\nOnly populated if the automation has been published.","readOnly":true},"publish_user_id":{"type":"string","description":"The ID of the user who last published this automation.\nOnly populated if the automation has been published.","readOnly":true},"activation_state":{"$ref":"#/components/schemas/v1AutomationActivationState"},"default_inputs":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/commonV1Value"},"description":"Default input values for this automation.\nKeys are input parameter names (matching AutomationInputSpec.name),\nvalues are the default values to use when inputs are not explicitly provided.\nThese are used to pre-populate inputs for manual runs and fill missing inputs\nfor trigger-based invocations.","readOnly":true},"marked_outputs":{"type":"array","items":{"type":"string"},"description":"List of output keys that have been marked by the user.\nThese keys identify specific outputs from the automation execution."}},"description":"Automation represents a unit of executable code with associated metadata and dependencies.\nAutomations can be in DRAFT or PUBLISHED state, where drafts can be modified and\npublished automations are immutable and executable.\nAutomation IDs are unique nano ID strings (21 characters, URL-safe: A-Za-z0-9_-).","required":["display_name"]},"v1BookConnection":{"type":"object","properties":{"connection_id":{"type":"string","description":"Unique identifier for this connection resource."},"endpoint":{"type":"string","description":"Endpoint for the connection."}},"description":"BookConnection is a resource representing a connection to a book instance.\nA connection has a unique identifier and an endpoint."},"v1AutomationInputSpec":{"type":"object","properties":{"name":{"type":"string","description":"The name of the input parameter."},"type":{"$ref":"#/components/schemas/v1ValueType"}},"description":"AutomationInputSpec defines the specification for an input parameter of an automation.","required":["name"]},"v1ValueType":{"type":"object","properties":{"scalar_type":{"$ref":"#/components/schemas/v1ValueScalarType"},"optional_type":{"$ref":"#/components/schemas/v1ValueOptionalType"},"list_type":{"$ref":"#/components/schemas/v1ValueListType"},"dictionary_type":{"$ref":"#/components/schemas/v1ValueDictionaryType"},"table_type":{"$ref":"#/components/schemas/v1ValueTableType"},"opaque_type":{"$ref":"#/components/schemas/v1ValueOpaqueType"},"any_type":{"$ref":"#/components/schemas/v1ValueAnyType"},"union_type":{"$ref":"#/components/schemas/v1ValueUnionType"},"sensitive_type":{"$ref":"#/components/schemas/v1ValueSensitiveType"},"enum_type":{"$ref":"#/components/schemas/v1ValueEnumType"},"generic_dictionary_type":{"$ref":"#/components/schemas/v1ValueGenericDictionaryType"}},"title":"Represents a complete value type definition using a discriminated union"},"v1ValueScalarType":{"type":"string","enum":["VALUE_SCALAR_TYPE_UNSPECIFIED","VALUE_SCALAR_TYPE_TEXT","VALUE_SCALAR_TYPE_NUMBER","VALUE_SCALAR_TYPE_BOOLEAN","VALUE_SCALAR_TYPE_DATETIME","VALUE_SCALAR_TYPE_DATE","VALUE_SCALAR_TYPE_TIME","VALUE_SCALAR_TYPE_FILE"],"default":"VALUE_SCALAR_TYPE_UNSPECIFIED","description":"- VALUE_SCALAR_TYPE_UNSPECIFIED: Unspecified value type\n - VALUE_SCALAR_TYPE_TEXT: A text value type\n - VALUE_SCALAR_TYPE_NUMBER: A number value type\n - VALUE_SCALAR_TYPE_BOOLEAN: A boolean value type\n - VALUE_SCALAR_TYPE_DATETIME: A datetime value type\n - VALUE_SCALAR_TYPE_DATE: A date value type\n - VALUE_SCALAR_TYPE_TIME: A time value type\n - VALUE_SCALAR_TYPE_FILE: A file value type","title":"Supported Value Scalar Types"},"v1ValueOptionalType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that can be optional (nullable)"},"v1ValueListType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a list/array value type containing elements of a specific type"},"v1ValueDictionaryType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this dictionary represents"},"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueDictionaryTypeField"},"title":"The named fields contained in this dictionary"},"description":{"type":"string","title":"Optional human-readable description of this dictionary type"}},"title":"Represents a dictionary/object value type with named fields"},"v1ValueDictionaryTypeField":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this field"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this field"}},"title":"Represents a single field within a dictionary value type"},"v1ValueTableType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this table represents"},"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueTableTypeColumn"},"title":"The columns that make up this table"},"description":{"type":"string","title":"Optional human-readable description of this table type"}},"title":"Represents a table value type with structured columns"},"v1ValueTableTypeColumn":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this column"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this column"}},"title":"Represents a single column within a table value type"},"v1ValueOpaqueType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this opaque type represents"},"description":{"type":"string","title":"Optional human-readable description of this opaque type"}},"title":"Represents an opaque value type with semantic meaning but unknown internal structure"},"v1ValueAnyType":{"type":"object","title":"Represents a value type that can hold any kind of value"},"v1ValueUnionType":{"type":"object","properties":{"inners":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueType"},"title":"The possible value types in this union"}},"title":"Represents a union value type that can be one of several possible types"},"v1ValueSensitiveType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that contains sensitive information"},"v1ValueEnumType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this enum represents"},"members":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueEnumTypeMember"},"title":"The available options/members of this enum"},"description":{"type":"string","title":"Optional human-readable description of this enum type"}},"title":"Represents an enumeration value type with predefined options"},"v1ValueEnumTypeMember":{"type":"object","properties":{"name":{"type":"string","title":"The programmatic name of this enum member"},"description":{"type":"string","title":"Optional human-readable description of this enum member"}},"title":"Represents a single member/option within an enum value type"},"v1ValueGenericDictionaryType":{"type":"object","properties":{"key_type":{"$ref":"#/components/schemas/v1ValueType"},"value_type":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represent a generic dictionary that can hold any entry of a particular key and value type"},"v1CodeMapping":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1CodeMappingEntry"},"description":"List of mapping entries that associate SPy code regions with English code regions.\nEach entry defines a paired relationship between a span in the SPy code and\na span in the English code representation."}},"description":"CodeMapping represents a bidirectional mapping between SPy (Subset-of-Python) code\nand English code locations within an automation. This mapping enables navigation between\nthe two representations, facilitating debugging, traceability, and synchronized editing.\nEach entry in the mapping associates a region in the SPy code with its corresponding\nregion in the English code. The mapping relationship is many-to-many and entries may\noverlap.","required":["entries"]},"v1CodeMappingEntry":{"type":"object","properties":{"spy_location":{"$ref":"#/components/schemas/commonV1Location"},"english_location":{"$ref":"#/components/schemas/commonV1Location"}},"description":"CodeMappingEntry represents a single mapping between a region in SPy code and\nits corresponding region in English code. This bidirectional association allows\nnavigation from SPy to English and vice versa, enabling synchronized views and\ndebugging across both representations of the automation logic.","required":["spy_location","english_location"]},"commonV1Location":{"type":"object","properties":{"start_byte":{"type":"string","format":"int64","title":"Starting Byte of the span, It will be zero-based"},"end_byte":{"type":"string","format":"int64","title":"Ending Byte(exclusive) of the span, It will be zero-based"}},"description":"Location represents a generic span within some underlying content.\nIt specifies the starting byte offset and the ending byte offset (exclusive) of the span.\nThis can be used for pointing to regions in files, buffers, logs, messages,\nor any other byte-addressable resource."},"v1AutomationActivationState":{"type":"string","enum":["AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","AUTOMATION_ACTIVATION_STATE_ACTIVE","AUTOMATION_ACTIVATION_STATE_DEACTIVATED"],"default":"AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","description":"Activation state of a published automation.\nControls whether the automation can execute published runs.\n\n - AUTOMATION_ACTIVATION_STATE_UNSPECIFIED: Unspecified state. Used when automation has no published version.\nActivation state is only meaningful after publishing.\n - AUTOMATION_ACTIVATION_STATE_ACTIVE: Automation is active and can execute published runs.\n - AUTOMATION_ACTIVATION_STATE_DEACTIVATED: Automation is deactivated and cannot execute published runs.\nEvents will be logged but not executed."},"commonV1Value":{"type":"object","properties":{"null_value":{"type":"string","title":"Represents the absence of a value (None/null/undefined)"},"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"},"duration":{"type":"string","title":"Signed duration representing a span of time"},"list":{"$ref":"#/components/schemas/v1List"},"dictionary":{"$ref":"#/components/schemas/v1Dictionary"},"file":{"$ref":"#/components/schemas/v1FileValue"},"table":{"$ref":"#/components/schemas/v1TableValue"},"set":{"$ref":"#/components/schemas/v1Set"}},"description":"Represents a runtime value that can be produced by the Jarvis interpreter.\n\nThis message provides a type-safe way to serialize and transmit values between\nthe Jarvis interpreter and other services via gRPC. It supports all the basic\ndata types that can be represented in the Jarvis language runtime.\n\nThe oneof structure ensures that exactly one value type is set at a time,\nproviding both type safety and efficient serialization."},"v1Number":{"type":"object","properties":{"lo":{"type":"integer","format":"int64","description":"Low 32 bits of the 96-bit mantissa."},"mid":{"type":"integer","format":"int64","description":"Middle 32 bits of the 96-bit mantissa."},"hi":{"type":"integer","format":"int64","description":"High 32 bits of the 96-bit mantissa."},"flags":{"type":"integer","format":"int64","description":"Flags word:\n - Bits 16–23: scale (0–28)\n - Bit 31: sign (0 = positive, 1 = negative)\n - Other bits must be zero."}},"description":"A fixed-precision decimal number with up to 28 fractional digits.\n\nThis message represents decimal numbers with exact precision, avoiding\nfloating-point rounding errors. It's particularly useful for financial\ncalculations, measurements, and any scenario where exact decimal\nrepresentation is required.\n\nThe value is calculated as: m / 10^e, where:\n - m is an unsigned 96-bit integer composed of (lo, mid, hi)\n - e is the scale (0–28) stored in flags bits 16–23\n - sign is encoded in flags bit 31 (0 = positive, 1 = negative)\n\nExamples:\n - 123.45 would have m=12345, e=2\n - -0.001 would have m=1, e=3, with sign bit set\n"},"typeDate":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year."},"month":{"type":"integer","format":"int32","description":"Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day."},"day":{"type":"integer","format":"int32","description":"Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant."}},"description":"* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.","title":"Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:"},"typeTimeOfDay":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","description":"Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time."},"minutes":{"type":"integer","format":"int32","description":"Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."}},"description":"Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`."},"typeDateTime":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a\ndatetime without a year."},"month":{"type":"integer","format":"int32","description":"Required. Month of year. Must be from 1 to 12."},"day":{"type":"integer","format":"int32","description":"Required. Day of month. Must be from 1 to 31 and valid for the year and\nmonth."},"hours":{"type":"integer","format":"int32","description":"Required. Hours of day in 24 hour format. Should be from 0 to 23. An API\nmay choose to allow the value \"24:00:00\" for scenarios like business\nclosing time."},"minutes":{"type":"integer","format":"int32","description":"Required. Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Required. Seconds of minutes of the time. Must normally be from 0 to 59. An\nAPI may allow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Required. Fractions of seconds in nanoseconds. Must be from 0 to\n999,999,999."},"utc_offset":{"type":"string","description":"UTC offset. Must be whole seconds, between -18 hours and +18 hours.\nFor example, a UTC offset of -4:00 would be represented as\n{ seconds: -14400 }."},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"}},"description":"Represents civil time (or occasionally physical time).\n\nThis type can represent a civil time in one of a few possible ways:\n\n * When utc_offset is set and time_zone is unset: a civil time on a calendar\n   day with a particular offset from UTC.\n * When time_zone is set and utc_offset is unset: a civil time on a calendar\n   day in a particular time zone.\n * When neither time_zone nor utc_offset is set: a civil time on a calendar\n   day in local time.\n\nThe date is relative to the Proleptic Gregorian Calendar.\n\nIf year is 0, the DateTime is considered not to have a specific year. month\nand day must have valid, non-zero values.\n\nThis type may also be used to represent a physical time if all the date and\ntime fields are set and either case of the `time_offset` oneof is set.\nConsider using `Timestamp` message for physical time instead. If your use\ncase also would like to store the user's timezone, that can be done in\nanother field.\n\nThis type is more flexible than some applications may want. Make sure to\ndocument and validate your application's limitations."},"typeTimeZone":{"type":"object","properties":{"id":{"type":"string","description":"IANA Time Zone Database time zone, e.g. \"America/New_York\"."},"version":{"type":"string","description":"Optional. IANA Time Zone Database version number, e.g. \"2019a\"."}},"description":"Represents a time zone from the\n[IANA Time Zone Database](https://www.iana.org/time-zones)."},"v1List":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/commonV1Value"},"title":"The ordered sequence of values in this list"}},"description":"Represents an ordered collection of values (similar to arrays or lists).\n\nThis message can contain any number of Value elements in a specific order.\nLists are mutable and can grow or shrink during runtime. Elements can be\naccessed by their zero-based index position.\n\nExamples:\n - [1, 2, 3] - list of numbers\n - [\"hello\", \"world\"] - list of strings\n - [true, 42, \"mixed\"] - list with mixed types\n - [[1, 2], [3, 4]] - nested lists"},"v1Dictionary":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryEntry"},"title":"The key-value pairs stored in this dictionary"}},"description":"Represents a key-value mapping (similar to hash maps or dictionaries).\n\nThis message stores associations between keys and values, where keys must be\nhashable types (null, bool, Number, string, Date, TimeOfDay, DateTime, TimeZone). Keys are\nunique within a dictionary - duplicate keys will overwrite previous values.\n\nThe dictionary maintains insertion order for consistent iteration behavior.\n\nExamples:\n - {\"name\": \"John\", \"age\": 30} - string keys with mixed values\n - {1: \"one\", 2: \"two\"} - number keys with string values\n - {\"nested\": {\"inner\": \"value\"}} - nested dictionaries"},"v1DictionaryEntry":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/v1HashableValue"},"value":{"$ref":"#/components/schemas/commonV1Value"}},"description":"Represents a single key-value pair within a Dictionary.\n\nBoth key and value can be any Value type, though keys should be\nhashable types for proper dictionary behavior. Non-hashable keys\n(like lists or dictionaries) may cause runtime errors."},"v1HashableValue":{"type":"object","properties":{"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"duration":{"type":"string","title":"Signed duration representing a span of time"}},"description":"Represents a hashable value that can be used as a dictionary key.\n\nThis message contains only the hashable types from the Value message,\ncorresponding to Python's hashable types. These types can be safely\nused as keys in maps and dictionaries.\n\nHashable types include: bool, Number, string, Date, TimeOfDay, DateTime\nand Duration."},"v1FileValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1File"}},"title":"A file value represents a file that can be either inline or remote"},"v1File":{"type":"object","properties":{"file_name":{"type":"string","title":"The name of the file"},"content":{"type":"string","format":"byte","title":"Content of the file as a byte stream"}}},"v1TableValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1Table"}},"title":"A table that is represented remote as an URL to a file that is Feather-formatted\nor inline via the Table message"},"v1Table":{"type":"object","properties":{"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1Column"}}},"description":"A table is a column-oriented structure. All the values inside each column must\nbe of equal length."},"v1Column":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"}},"name":{"type":"string"}}},"bdkV1Value":{"type":"object","properties":{"null_value":{"type":"string"},"conceptual_value":{"$ref":"#/components/schemas/v1NounPhrase"},"text_value":{"type":"string"},"number_value":{"type":"number","format":"double"},"boolean_value":{"type":"boolean"},"datetime_value":{"type":"string","format":"date-time"},"date_value":{"$ref":"#/components/schemas/v1Date"},"time_value":{"$ref":"#/components/schemas/v1Time"},"file_value":{"$ref":"#/components/schemas/v1FileValue"},"dictionary_value":{"$ref":"#/components/schemas/v1DictionaryValue"},"list_value":{"$ref":"#/components/schemas/bdkV1ListValue"},"opaque_value":{"$ref":"#/components/schemas/v1OpaqueValue"},"table_value":{"$ref":"#/components/schemas/v1TableValue"},"sensitive_value":{"$ref":"#/components/schemas/v1SensitiveValue"}},"title":"A union of all possible values"},"v1NounPhrase":{"type":"object","properties":{"modifiers":{"type":"array","items":{"type":"string"},"title":"Optional adjectives attached to the noun"},"head":{"type":"string","title":"Noun of the phrase"}}},"v1Date":{"type":"object","properties":{"year":{"type":"integer","format":"int32","title":"Year of the date"},"month":{"type":"integer","format":"int32","title":"Month of a year"},"day":{"type":"integer","format":"int32","title":"Day of a month"}}},"v1Time":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","title":"Hours of day"},"minutes":{"type":"integer","format":"int32","title":"Minutes of hour of day"},"seconds":{"type":"integer","format":"int32","title":"Seconds of minutes of the time"},"nanos":{"type":"integer","format":"int32","title":"Fractions of seconds in nanoseconds"}}},"v1DictionaryValue":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryValueField"},"title":"All the fields alongside their values in the dictionary"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the dictionary"}},"title":"Value to be used when the type is dictionary"},"v1DictionaryValueField":{"type":"object","properties":{"key":{"type":"string"},"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"Each key-value pair inside a dictionary"},"bdkV1ListValue":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"},"title":"All the values inside the list"}},"title":"A collection of values"},"v1OpaqueValue":{"type":"object","properties":{"content":{"type":"string","format":"byte","title":"Content of the opaque value"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the opaque"}}},"v1SensitiveValue":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"A sensitive value is any value marked as sensitive (to prevent exposure)"},"v1Set":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/v1HashableValue"},"title":"The unique elements stored in this set\nAll elements must be hashable types"}},"description":"Represents an unordered collection of unique values.\n\nThis message stores a collection of unique elements, where duplicate values\nare automatically removed. Only hashable types can be stored in sets.\nSets are useful for membership testing, removing duplicates, and mathematical\nset operations like union, intersection, and difference.\n\nThe set does not maintain insertion order - elements may appear in any order\nduring iteration.\n\nExamples:\n - {1, 2, 3} - set of numbers\n - {\"apple\", \"banana\", \"cherry\"} - set of strings\n - {true, false} - set of booleans\n - {1, \"hello\", true} - set with mixed hashable types"},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations":{"get":{"summary":"List Automations","operationId":"ListAutomations","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1ListAutomationsResponse"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"page_size","description":"The maximum number of automations to return in a single response.\nThe service may return fewer than this value.\nIf unspecified, at most 10 automations will be returned.\nThe maximum value is 1000; values above 1000 will be coerced to 1000.\nIf negative, an INVALID_ARGUMENT error will be returned.","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"page_token","description":"A page token received from a previous `ListAutomations` call.\nProvide this to retrieve the subsequent page of results.\nWhen paginating, all other parameters provided to `ListAutomations` must match\nthe call that provided the page token.","in":"query","required":false,"schema":{"type":"string"}},{"name":"show_deleted","description":"Filter to show/hide deleted automations. Deleted automations will be hidden by default.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"filter","description":"Filter expression to restrict results. Per AIP-160, this should be a\nfiltering expression following the Common Expression Language (CEL) syntax.\n\nSupported fields for filtering:\n  - `state`: The automation state (e.g., DRAFT, PUBLISHED)\n\nExample filters:\n  - `state = \"PUBLISHED\"`","in":"query","required":false,"schema":{"type":"string"}},{"name":"order_by","description":"Reserved for future use. Comma-separated list of fields to order results by.\nPer AIP-132, this should be a string containing one or more field names,\neach optionally followed by \"asc\" or \"desc\" to specify sort direction.\n\nCurrently not implemented. Results are always ordered by `update_time desc`\n(most recently updated first).","in":"query","required":false,"schema":{"type":"string"}}],"tags":["Automations"]}}}}
```

## POST /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations/{automation\_id}:invoke

> Invoke Automation

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1InvokeAutomationResponse":{"type":"object","properties":{"run_id":{"type":"string","description":"Unique identifier of the run created to execute the automation.\nUse this ID to track execution status and retrieve results."}},"description":"InvokeAutomationResponse returns the run ID for tracking the automation execution."},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"InvokeAutomationBody":{"type":"object","properties":{"inputs":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/commonV1Value"},"description":"Input values to pass to the automation execution.\nKeys are input parameter names, values are the corresponding values."},"stage":{"$ref":"#/components/schemas/v1AutomationStage"}},"description":"InvokeAutomationRequest contains the automation ID and inputs needed to execute an automation.","required":["stage"]},"commonV1Value":{"type":"object","properties":{"null_value":{"type":"string","title":"Represents the absence of a value (None/null/undefined)"},"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"},"duration":{"type":"string","title":"Signed duration representing a span of time"},"list":{"$ref":"#/components/schemas/v1List"},"dictionary":{"$ref":"#/components/schemas/v1Dictionary"},"file":{"$ref":"#/components/schemas/v1FileValue"},"table":{"$ref":"#/components/schemas/v1TableValue"},"set":{"$ref":"#/components/schemas/v1Set"}},"description":"Represents a runtime value that can be produced by the Jarvis interpreter.\n\nThis message provides a type-safe way to serialize and transmit values between\nthe Jarvis interpreter and other services via gRPC. It supports all the basic\ndata types that can be represented in the Jarvis language runtime.\n\nThe oneof structure ensures that exactly one value type is set at a time,\nproviding both type safety and efficient serialization."},"v1Number":{"type":"object","properties":{"lo":{"type":"integer","format":"int64","description":"Low 32 bits of the 96-bit mantissa."},"mid":{"type":"integer","format":"int64","description":"Middle 32 bits of the 96-bit mantissa."},"hi":{"type":"integer","format":"int64","description":"High 32 bits of the 96-bit mantissa."},"flags":{"type":"integer","format":"int64","description":"Flags word:\n - Bits 16–23: scale (0–28)\n - Bit 31: sign (0 = positive, 1 = negative)\n - Other bits must be zero."}},"description":"A fixed-precision decimal number with up to 28 fractional digits.\n\nThis message represents decimal numbers with exact precision, avoiding\nfloating-point rounding errors. It's particularly useful for financial\ncalculations, measurements, and any scenario where exact decimal\nrepresentation is required.\n\nThe value is calculated as: m / 10^e, where:\n - m is an unsigned 96-bit integer composed of (lo, mid, hi)\n - e is the scale (0–28) stored in flags bits 16–23\n - sign is encoded in flags bit 31 (0 = positive, 1 = negative)\n\nExamples:\n - 123.45 would have m=12345, e=2\n - -0.001 would have m=1, e=3, with sign bit set\n"},"typeDate":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year."},"month":{"type":"integer","format":"int32","description":"Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day."},"day":{"type":"integer","format":"int32","description":"Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant."}},"description":"* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.","title":"Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:"},"typeTimeOfDay":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","description":"Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time."},"minutes":{"type":"integer","format":"int32","description":"Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."}},"description":"Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`."},"typeDateTime":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a\ndatetime without a year."},"month":{"type":"integer","format":"int32","description":"Required. Month of year. Must be from 1 to 12."},"day":{"type":"integer","format":"int32","description":"Required. Day of month. Must be from 1 to 31 and valid for the year and\nmonth."},"hours":{"type":"integer","format":"int32","description":"Required. Hours of day in 24 hour format. Should be from 0 to 23. An API\nmay choose to allow the value \"24:00:00\" for scenarios like business\nclosing time."},"minutes":{"type":"integer","format":"int32","description":"Required. Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Required. Seconds of minutes of the time. Must normally be from 0 to 59. An\nAPI may allow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Required. Fractions of seconds in nanoseconds. Must be from 0 to\n999,999,999."},"utc_offset":{"type":"string","description":"UTC offset. Must be whole seconds, between -18 hours and +18 hours.\nFor example, a UTC offset of -4:00 would be represented as\n{ seconds: -14400 }."},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"}},"description":"Represents civil time (or occasionally physical time).\n\nThis type can represent a civil time in one of a few possible ways:\n\n * When utc_offset is set and time_zone is unset: a civil time on a calendar\n   day with a particular offset from UTC.\n * When time_zone is set and utc_offset is unset: a civil time on a calendar\n   day in a particular time zone.\n * When neither time_zone nor utc_offset is set: a civil time on a calendar\n   day in local time.\n\nThe date is relative to the Proleptic Gregorian Calendar.\n\nIf year is 0, the DateTime is considered not to have a specific year. month\nand day must have valid, non-zero values.\n\nThis type may also be used to represent a physical time if all the date and\ntime fields are set and either case of the `time_offset` oneof is set.\nConsider using `Timestamp` message for physical time instead. If your use\ncase also would like to store the user's timezone, that can be done in\nanother field.\n\nThis type is more flexible than some applications may want. Make sure to\ndocument and validate your application's limitations."},"typeTimeZone":{"type":"object","properties":{"id":{"type":"string","description":"IANA Time Zone Database time zone, e.g. \"America/New_York\"."},"version":{"type":"string","description":"Optional. IANA Time Zone Database version number, e.g. \"2019a\"."}},"description":"Represents a time zone from the\n[IANA Time Zone Database](https://www.iana.org/time-zones)."},"v1List":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/commonV1Value"},"title":"The ordered sequence of values in this list"}},"description":"Represents an ordered collection of values (similar to arrays or lists).\n\nThis message can contain any number of Value elements in a specific order.\nLists are mutable and can grow or shrink during runtime. Elements can be\naccessed by their zero-based index position.\n\nExamples:\n - [1, 2, 3] - list of numbers\n - [\"hello\", \"world\"] - list of strings\n - [true, 42, \"mixed\"] - list with mixed types\n - [[1, 2], [3, 4]] - nested lists"},"v1Dictionary":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryEntry"},"title":"The key-value pairs stored in this dictionary"}},"description":"Represents a key-value mapping (similar to hash maps or dictionaries).\n\nThis message stores associations between keys and values, where keys must be\nhashable types (null, bool, Number, string, Date, TimeOfDay, DateTime, TimeZone). Keys are\nunique within a dictionary - duplicate keys will overwrite previous values.\n\nThe dictionary maintains insertion order for consistent iteration behavior.\n\nExamples:\n - {\"name\": \"John\", \"age\": 30} - string keys with mixed values\n - {1: \"one\", 2: \"two\"} - number keys with string values\n - {\"nested\": {\"inner\": \"value\"}} - nested dictionaries"},"v1DictionaryEntry":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/v1HashableValue"},"value":{"$ref":"#/components/schemas/commonV1Value"}},"description":"Represents a single key-value pair within a Dictionary.\n\nBoth key and value can be any Value type, though keys should be\nhashable types for proper dictionary behavior. Non-hashable keys\n(like lists or dictionaries) may cause runtime errors."},"v1HashableValue":{"type":"object","properties":{"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"duration":{"type":"string","title":"Signed duration representing a span of time"}},"description":"Represents a hashable value that can be used as a dictionary key.\n\nThis message contains only the hashable types from the Value message,\ncorresponding to Python's hashable types. These types can be safely\nused as keys in maps and dictionaries.\n\nHashable types include: bool, Number, string, Date, TimeOfDay, DateTime\nand Duration."},"v1FileValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1File"}},"title":"A file value represents a file that can be either inline or remote"},"v1File":{"type":"object","properties":{"file_name":{"type":"string","title":"The name of the file"},"content":{"type":"string","format":"byte","title":"Content of the file as a byte stream"}}},"v1TableValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1Table"}},"title":"A table that is represented remote as an URL to a file that is Feather-formatted\nor inline via the Table message"},"v1Table":{"type":"object","properties":{"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1Column"}}},"description":"A table is a column-oriented structure. All the values inside each column must\nbe of equal length."},"v1Column":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"}},"name":{"type":"string"}}},"bdkV1Value":{"type":"object","properties":{"null_value":{"type":"string"},"conceptual_value":{"$ref":"#/components/schemas/v1NounPhrase"},"text_value":{"type":"string"},"number_value":{"type":"number","format":"double"},"boolean_value":{"type":"boolean"},"datetime_value":{"type":"string","format":"date-time"},"date_value":{"$ref":"#/components/schemas/v1Date"},"time_value":{"$ref":"#/components/schemas/v1Time"},"file_value":{"$ref":"#/components/schemas/v1FileValue"},"dictionary_value":{"$ref":"#/components/schemas/v1DictionaryValue"},"list_value":{"$ref":"#/components/schemas/bdkV1ListValue"},"opaque_value":{"$ref":"#/components/schemas/v1OpaqueValue"},"table_value":{"$ref":"#/components/schemas/v1TableValue"},"sensitive_value":{"$ref":"#/components/schemas/v1SensitiveValue"}},"title":"A union of all possible values"},"v1NounPhrase":{"type":"object","properties":{"modifiers":{"type":"array","items":{"type":"string"},"title":"Optional adjectives attached to the noun"},"head":{"type":"string","title":"Noun of the phrase"}}},"v1Date":{"type":"object","properties":{"year":{"type":"integer","format":"int32","title":"Year of the date"},"month":{"type":"integer","format":"int32","title":"Month of a year"},"day":{"type":"integer","format":"int32","title":"Day of a month"}}},"v1Time":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","title":"Hours of day"},"minutes":{"type":"integer","format":"int32","title":"Minutes of hour of day"},"seconds":{"type":"integer","format":"int32","title":"Seconds of minutes of the time"},"nanos":{"type":"integer","format":"int32","title":"Fractions of seconds in nanoseconds"}}},"v1DictionaryValue":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryValueField"},"title":"All the fields alongside their values in the dictionary"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the dictionary"}},"title":"Value to be used when the type is dictionary"},"v1DictionaryValueField":{"type":"object","properties":{"key":{"type":"string"},"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"Each key-value pair inside a dictionary"},"bdkV1ListValue":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"},"title":"All the values inside the list"}},"title":"A collection of values"},"v1OpaqueValue":{"type":"object","properties":{"content":{"type":"string","format":"byte","title":"Content of the opaque value"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the opaque"}}},"v1SensitiveValue":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"A sensitive value is any value marked as sensitive (to prevent exposure)"},"v1Set":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/v1HashableValue"},"title":"The unique elements stored in this set\nAll elements must be hashable types"}},"description":"Represents an unordered collection of unique values.\n\nThis message stores a collection of unique elements, where duplicate values\nare automatically removed. Only hashable types can be stored in sets.\nSets are useful for membership testing, removing duplicates, and mathematical\nset operations like union, intersection, and difference.\n\nThe set does not maintain insertion order - elements may appear in any order\nduring iteration.\n\nExamples:\n - {1, 2, 3} - set of numbers\n - {\"apple\", \"banana\", \"cherry\"} - set of strings\n - {true, false} - set of booleans\n - {1, \"hello\", true} - set with mixed hashable types"},"v1AutomationStage":{"type":"string","enum":["AUTOMATION_STAGE_UNSPECIFIED","AUTOMATION_STAGE_DRAFT","AUTOMATION_STAGE_PUBLISHED"],"default":"AUTOMATION_STAGE_UNSPECIFIED","description":"AutomationStage represents the publication stage of an automation.\nThis enum is shared across services that manage or execute automations.\n\n - AUTOMATION_STAGE_UNSPECIFIED: Automation stage is not specified.\n - AUTOMATION_STAGE_DRAFT: Automation is in draft stage and can be modified.\n - AUTOMATION_STAGE_PUBLISHED: Automation is published and immutable, ready for execution."}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}:invoke":{"post":{"summary":"Invoke Automation","operationId":"InvokeAutomation","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1InvokeAutomationResponse"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvokeAutomationBody"}}},"required":true},"tags":["Automations"]}}}}
```

## List Default Inputs History

> Results are returned in reverse chronological order (newest first).\
> Optionally filter by stage (DRAFT or PUBLISHED).

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1ListDefaultInputsHistoryResponse":{"type":"object","properties":{"default_inputs_history_entries":{"type":"array","items":{"$ref":"#/components/schemas/v1DefaultInputsHistoryEntry"},"description":"The history entries, ordered newest first."},"next_page_token":{"type":"string","description":"Token for retrieving the next page. Empty if no more results."}},"description":"ListDefaultInputsHistoryResponse contains a paginated list of default input history entries."},"v1DefaultInputsHistoryEntry":{"type":"object","properties":{"default_inputs":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/commonV1Value"},"description":"The default inputs snapshot at the time of this change.","readOnly":true},"change_time":{"type":"string","format":"date-time","description":"When this change was made.","readOnly":true},"change_actor":{"type":"string","description":"User ID of the person who made this change.","readOnly":true}},"description":"DefaultInputsHistoryEntry represents a single default input change event."},"commonV1Value":{"type":"object","properties":{"null_value":{"type":"string","title":"Represents the absence of a value (None/null/undefined)"},"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"},"duration":{"type":"string","title":"Signed duration representing a span of time"},"list":{"$ref":"#/components/schemas/v1List"},"dictionary":{"$ref":"#/components/schemas/v1Dictionary"},"file":{"$ref":"#/components/schemas/v1FileValue"},"table":{"$ref":"#/components/schemas/v1TableValue"},"set":{"$ref":"#/components/schemas/v1Set"}},"description":"Represents a runtime value that can be produced by the Jarvis interpreter.\n\nThis message provides a type-safe way to serialize and transmit values between\nthe Jarvis interpreter and other services via gRPC. It supports all the basic\ndata types that can be represented in the Jarvis language runtime.\n\nThe oneof structure ensures that exactly one value type is set at a time,\nproviding both type safety and efficient serialization."},"v1Number":{"type":"object","properties":{"lo":{"type":"integer","format":"int64","description":"Low 32 bits of the 96-bit mantissa."},"mid":{"type":"integer","format":"int64","description":"Middle 32 bits of the 96-bit mantissa."},"hi":{"type":"integer","format":"int64","description":"High 32 bits of the 96-bit mantissa."},"flags":{"type":"integer","format":"int64","description":"Flags word:\n - Bits 16–23: scale (0–28)\n - Bit 31: sign (0 = positive, 1 = negative)\n - Other bits must be zero."}},"description":"A fixed-precision decimal number with up to 28 fractional digits.\n\nThis message represents decimal numbers with exact precision, avoiding\nfloating-point rounding errors. It's particularly useful for financial\ncalculations, measurements, and any scenario where exact decimal\nrepresentation is required.\n\nThe value is calculated as: m / 10^e, where:\n - m is an unsigned 96-bit integer composed of (lo, mid, hi)\n - e is the scale (0–28) stored in flags bits 16–23\n - sign is encoded in flags bit 31 (0 = positive, 1 = negative)\n\nExamples:\n - 123.45 would have m=12345, e=2\n - -0.001 would have m=1, e=3, with sign bit set\n"},"typeDate":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year."},"month":{"type":"integer","format":"int32","description":"Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day."},"day":{"type":"integer","format":"int32","description":"Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant."}},"description":"* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.","title":"Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:"},"typeTimeOfDay":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","description":"Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time."},"minutes":{"type":"integer","format":"int32","description":"Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."}},"description":"Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`."},"typeDateTime":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a\ndatetime without a year."},"month":{"type":"integer","format":"int32","description":"Required. Month of year. Must be from 1 to 12."},"day":{"type":"integer","format":"int32","description":"Required. Day of month. Must be from 1 to 31 and valid for the year and\nmonth."},"hours":{"type":"integer","format":"int32","description":"Required. Hours of day in 24 hour format. Should be from 0 to 23. An API\nmay choose to allow the value \"24:00:00\" for scenarios like business\nclosing time."},"minutes":{"type":"integer","format":"int32","description":"Required. Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Required. Seconds of minutes of the time. Must normally be from 0 to 59. An\nAPI may allow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Required. Fractions of seconds in nanoseconds. Must be from 0 to\n999,999,999."},"utc_offset":{"type":"string","description":"UTC offset. Must be whole seconds, between -18 hours and +18 hours.\nFor example, a UTC offset of -4:00 would be represented as\n{ seconds: -14400 }."},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"}},"description":"Represents civil time (or occasionally physical time).\n\nThis type can represent a civil time in one of a few possible ways:\n\n * When utc_offset is set and time_zone is unset: a civil time on a calendar\n   day with a particular offset from UTC.\n * When time_zone is set and utc_offset is unset: a civil time on a calendar\n   day in a particular time zone.\n * When neither time_zone nor utc_offset is set: a civil time on a calendar\n   day in local time.\n\nThe date is relative to the Proleptic Gregorian Calendar.\n\nIf year is 0, the DateTime is considered not to have a specific year. month\nand day must have valid, non-zero values.\n\nThis type may also be used to represent a physical time if all the date and\ntime fields are set and either case of the `time_offset` oneof is set.\nConsider using `Timestamp` message for physical time instead. If your use\ncase also would like to store the user's timezone, that can be done in\nanother field.\n\nThis type is more flexible than some applications may want. Make sure to\ndocument and validate your application's limitations."},"typeTimeZone":{"type":"object","properties":{"id":{"type":"string","description":"IANA Time Zone Database time zone, e.g. \"America/New_York\"."},"version":{"type":"string","description":"Optional. IANA Time Zone Database version number, e.g. \"2019a\"."}},"description":"Represents a time zone from the\n[IANA Time Zone Database](https://www.iana.org/time-zones)."},"v1List":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/commonV1Value"},"title":"The ordered sequence of values in this list"}},"description":"Represents an ordered collection of values (similar to arrays or lists).\n\nThis message can contain any number of Value elements in a specific order.\nLists are mutable and can grow or shrink during runtime. Elements can be\naccessed by their zero-based index position.\n\nExamples:\n - [1, 2, 3] - list of numbers\n - [\"hello\", \"world\"] - list of strings\n - [true, 42, \"mixed\"] - list with mixed types\n - [[1, 2], [3, 4]] - nested lists"},"v1Dictionary":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryEntry"},"title":"The key-value pairs stored in this dictionary"}},"description":"Represents a key-value mapping (similar to hash maps or dictionaries).\n\nThis message stores associations between keys and values, where keys must be\nhashable types (null, bool, Number, string, Date, TimeOfDay, DateTime, TimeZone). Keys are\nunique within a dictionary - duplicate keys will overwrite previous values.\n\nThe dictionary maintains insertion order for consistent iteration behavior.\n\nExamples:\n - {\"name\": \"John\", \"age\": 30} - string keys with mixed values\n - {1: \"one\", 2: \"two\"} - number keys with string values\n - {\"nested\": {\"inner\": \"value\"}} - nested dictionaries"},"v1DictionaryEntry":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/v1HashableValue"},"value":{"$ref":"#/components/schemas/commonV1Value"}},"description":"Represents a single key-value pair within a Dictionary.\n\nBoth key and value can be any Value type, though keys should be\nhashable types for proper dictionary behavior. Non-hashable keys\n(like lists or dictionaries) may cause runtime errors."},"v1HashableValue":{"type":"object","properties":{"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"duration":{"type":"string","title":"Signed duration representing a span of time"}},"description":"Represents a hashable value that can be used as a dictionary key.\n\nThis message contains only the hashable types from the Value message,\ncorresponding to Python's hashable types. These types can be safely\nused as keys in maps and dictionaries.\n\nHashable types include: bool, Number, string, Date, TimeOfDay, DateTime\nand Duration."},"v1FileValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1File"}},"title":"A file value represents a file that can be either inline or remote"},"v1File":{"type":"object","properties":{"file_name":{"type":"string","title":"The name of the file"},"content":{"type":"string","format":"byte","title":"Content of the file as a byte stream"}}},"v1TableValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1Table"}},"title":"A table that is represented remote as an URL to a file that is Feather-formatted\nor inline via the Table message"},"v1Table":{"type":"object","properties":{"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1Column"}}},"description":"A table is a column-oriented structure. All the values inside each column must\nbe of equal length."},"v1Column":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"}},"name":{"type":"string"}}},"bdkV1Value":{"type":"object","properties":{"null_value":{"type":"string"},"conceptual_value":{"$ref":"#/components/schemas/v1NounPhrase"},"text_value":{"type":"string"},"number_value":{"type":"number","format":"double"},"boolean_value":{"type":"boolean"},"datetime_value":{"type":"string","format":"date-time"},"date_value":{"$ref":"#/components/schemas/v1Date"},"time_value":{"$ref":"#/components/schemas/v1Time"},"file_value":{"$ref":"#/components/schemas/v1FileValue"},"dictionary_value":{"$ref":"#/components/schemas/v1DictionaryValue"},"list_value":{"$ref":"#/components/schemas/bdkV1ListValue"},"opaque_value":{"$ref":"#/components/schemas/v1OpaqueValue"},"table_value":{"$ref":"#/components/schemas/v1TableValue"},"sensitive_value":{"$ref":"#/components/schemas/v1SensitiveValue"}},"title":"A union of all possible values"},"v1NounPhrase":{"type":"object","properties":{"modifiers":{"type":"array","items":{"type":"string"},"title":"Optional adjectives attached to the noun"},"head":{"type":"string","title":"Noun of the phrase"}}},"v1Date":{"type":"object","properties":{"year":{"type":"integer","format":"int32","title":"Year of the date"},"month":{"type":"integer","format":"int32","title":"Month of a year"},"day":{"type":"integer","format":"int32","title":"Day of a month"}}},"v1Time":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","title":"Hours of day"},"minutes":{"type":"integer","format":"int32","title":"Minutes of hour of day"},"seconds":{"type":"integer","format":"int32","title":"Seconds of minutes of the time"},"nanos":{"type":"integer","format":"int32","title":"Fractions of seconds in nanoseconds"}}},"v1DictionaryValue":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryValueField"},"title":"All the fields alongside their values in the dictionary"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the dictionary"}},"title":"Value to be used when the type is dictionary"},"v1DictionaryValueField":{"type":"object","properties":{"key":{"type":"string"},"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"Each key-value pair inside a dictionary"},"bdkV1ListValue":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"},"title":"All the values inside the list"}},"title":"A collection of values"},"v1OpaqueValue":{"type":"object","properties":{"content":{"type":"string","format":"byte","title":"Content of the opaque value"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the opaque"}}},"v1SensitiveValue":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"A sensitive value is any value marked as sensitive (to prevent exposure)"},"v1Set":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/v1HashableValue"},"title":"The unique elements stored in this set\nAll elements must be hashable types"}},"description":"Represents an unordered collection of unique values.\n\nThis message stores a collection of unique elements, where duplicate values\nare automatically removed. Only hashable types can be stored in sets.\nSets are useful for membership testing, removing duplicates, and mathematical\nset operations like union, intersection, and difference.\n\nThe set does not maintain insertion order - elements may appear in any order\nduring iteration.\n\nExamples:\n - {1, 2, 3} - set of numbers\n - {\"apple\", \"banana\", \"cherry\"} - set of strings\n - {true, false} - set of booleans\n - {1, \"hello\", true} - set with mixed hashable types"},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}:listDefaultInputsHistory":{"get":{"summary":"List Default Inputs History","description":"Results are returned in reverse chronological order (newest first).\nOptionally filter by stage (DRAFT or PUBLISHED).","operationId":"ListDefaultInputsHistory","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1ListDefaultInputsHistoryResponse"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"page_size","description":"Maximum number of entries to return. Defaults to 50 if not specified.","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"page_token","description":"Page token for pagination, from a previous ListDefaultInputsHistoryResponse.","in":"query","required":false,"schema":{"type":"string"}}],"tags":["Automations"]}}}}
```

## POST /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations:countConnectionUsage

> Count Connection Usage

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1CountConnectionUsageResponse":{"type":"object","properties":{"connection_counts":{"type":"array","items":{"$ref":"#/components/schemas/v1ConnectionAutomationCount"},"description":"List of connection IDs with their corresponding automation counts.\nThe order matches the order of connection_ids in the request."}},"description":"CountConnectionUsageResponse returns automation counts for each requested connection ID."},"v1ConnectionAutomationCount":{"type":"object","properties":{"connection_id":{"type":"string","description":"The connection ID being counted."},"count":{"type":"integer","format":"int32","description":"The number of automations that use this connection.\nIncludes both DRAFT and PUBLISHED automations by default."}},"description":"ConnectionAutomationCount represents the count of automations using a specific connection."},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"CountConnectionUsageBody":{"type":"object","properties":{"connection_ids":{"type":"array","items":{"type":"string"},"description":"List of connection IDs to count automation usage for.\nEach connection ID will have a corresponding entry in the response."}},"description":"CountConnectionUsageRequest specifies connection IDs to count automation usage for.","required":["connection_ids"]}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations:countConnectionUsage":{"post":{"summary":"Count Connection Usage","operationId":"CountConnectionUsage","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1CountConnectionUsageResponse"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountConnectionUsageBody"}}},"required":true},"tags":["Automations"]}}}}
```

## POST /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations:traceConnectionUsage

> Trace Connection Usage

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1TraceConnectionUsageResponse":{"type":"object","properties":{"automations":{"type":"array","items":{"$ref":"#/components/schemas/v1AutomationConnectionUsage"},"description":"List of automations that use the specified connection, with their stages."}},"description":"TraceConnectionUsageResponse returns automations that use the specified connection."},"v1AutomationConnectionUsage":{"type":"object","properties":{"automation_id":{"type":"string","description":"The automation ID that uses the connection.\nThis is the automation ID portion only (e.g., the {automation} part of the resource name)."},"stages":{"type":"array","items":{"$ref":"#/components/schemas/v1AutomationStage"},"description":"The stages in which this automation uses the connection.\nCan include AUTOMATION_STAGE_DRAFT, AUTOMATION_STAGE_PUBLISHED, or both."}},"description":"AutomationConnectionUsage represents an automation that uses a specific connection,\nalong with the stages (DRAFT, PUBLISHED, or both) where the connection is used."},"v1AutomationStage":{"type":"string","enum":["AUTOMATION_STAGE_UNSPECIFIED","AUTOMATION_STAGE_DRAFT","AUTOMATION_STAGE_PUBLISHED"],"default":"AUTOMATION_STAGE_UNSPECIFIED","description":"AutomationStage represents the publication stage of an automation.\nThis enum is shared across services that manage or execute automations.\n\n - AUTOMATION_STAGE_UNSPECIFIED: Automation stage is not specified.\n - AUTOMATION_STAGE_DRAFT: Automation is in draft stage and can be modified.\n - AUTOMATION_STAGE_PUBLISHED: Automation is published and immutable, ready for execution."},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"TraceConnectionUsageBody":{"type":"object","properties":{"connection_id":{"type":"string","description":"The connection ID to trace usage for.\nReturns all automations that use this connection."}},"description":"TraceConnectionUsageRequest specifies which connection to trace usage for.","required":["connection_id"]}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations:traceConnectionUsage":{"post":{"summary":"Trace Connection Usage","operationId":"TraceConnectionUsage","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1TraceConnectionUsageResponse"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraceConnectionUsageBody"}}},"required":true},"tags":["Automations"]}}}}
```

## GET /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations/{automation\_id}:extractCodeConnections

> Extract Automation Code Connections

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1ExtractAutomationCodeConnectionsResponse":{"type":"object","properties":{"connections":{"type":"array","items":{"$ref":"#/components/schemas/v1CredentialInfo"},"description":"List of connections found in the automation's SPy code.\nIncludes both placeholder connections (without connection_id) and concrete connections (with connection_id).","readOnly":true}},"description":"ExtractAutomationCodeConnectionsResponse returns connection information from the automation's SPy code."},"v1CredentialInfo":{"type":"object","properties":{"book":{"type":"string","description":"The name of the book requiring credentials.\nThis field represents the book name."},"book_version":{"type":"string","description":"The version of the book."},"connection_alias":{"type":"string","description":"The alias of the connection within the automation.\nThis field represents the connection alias."},"connection_id":{"type":"string","description":"The unique identifier of the connection."},"phase_type":{"$ref":"#/components/schemas/v1PhaseType"}},"description":"CredentialInfo describes connection credential information.","required":["book","book_version"]},"v1PhaseType":{"type":"string","enum":["PHASE_TYPE_UNSPECIFIED","PHASE_TYPE_PRE","PHASE_TYPE_MAIN","PHASE_TYPE_POST"],"default":"PHASE_TYPE_UNSPECIFIED","description":"PhaseType defines the type of phase for an automation trigger.\n\n - PHASE_TYPE_UNSPECIFIED: Unspecified phase type.\n - PHASE_TYPE_PRE: Pre-processing phase.\n - PHASE_TYPE_MAIN: Main processing phase.\n - PHASE_TYPE_POST: Post-processing phase."},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}:extractCodeConnections":{"get":{"summary":"Extract Automation Code Connections","operationId":"ExtractAutomationCodeConnections","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1ExtractAutomationCodeConnectionsResponse"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"filter","description":"Filter expression to restrict results. Per AIP-160, this should be a\nfiltering expression following the Common Expression Language (CEL) syntax.\n\nSupported fields for filtering:\n  - `stage`: The automation stage to extract connections from (e.g., DRAFT, PUBLISHED)\n\nExample filters:\n  - `stage = \"DRAFT\"`\n  - `stage = \"PUBLISHED\"`","in":"query","required":true,"schema":{"type":"string"}}],"tags":["Automations"]}}}}
```

## Upgrade Automation Connections

> Multiple connections can be upgraded in a single atomic operation. All upgrades succeed\
> together or all fail together. The automation version is incremented once for all upgrades.\
> \
> This operation only works on draft automations. To upgrade connections in a published\
> automation, first use ForkPublishedAutomation to create a draft, then call this method.\
> \
> Per AIP-136, this is a custom method using the :upgradeConnections suffix.

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1UpgradeAutomationConnectionsResponse":{"type":"object","properties":{"automation":{"$ref":"#/components/schemas/v1Automation"}},"description":"UpgradeAutomationConnectionsResponse returns the updated automation."},"v1Automation":{"type":"object","properties":{"name":{"type":"string","title":"The automation name (e.g. 'automations/{automation}')"},"display_name":{"type":"string","description":"Human-readable name of the automation for identification and display.\nMust be unique within the user's namespace."},"english_code":{"type":"string","description":"User-facing English description code that explains what the automation does.\nThis is a human-readable representation of the automation's purpose and logic."},"code":{"type":"string","description":"SPy (Subset-of Python) executable code that defines the automation logic.\nThis code is executed when the automation is invoked with inputs."},"artifacts":{"type":"object","additionalProperties":{"type":"string","format":"byte"},"description":"Additional artifacts associated with the automation (e.g., data files, configurations).\nKeys are artifact names, values are the binary content of the artifacts.\nThese artifacts are available to the automation during execution."},"create_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was originally created.\nThis value never changes after creation.","readOnly":true},"version":{"type":"string","title":"Semantic version of this specific version of the automation (format: major.minor).\nIncremented each time the automation is updated or published.\nExamples: \"0.1\", \"1.0\", \"1.1\", \"2.0\"","readOnly":true},"connections":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v1BookConnection"},"description":"Book connections required by this automation for execution.\nMaps connection names to their metadata.\nThese connections are resolved and made available during automation execution."},"update_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last updated.\nUpdated whenever the automation metadata, code, or dependencies change.","readOnly":true},"update_user_id":{"type":"string","description":"The ID of the user who last updated this automation.","readOnly":true},"delete_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was deleted.","readOnly":true},"purge_time":{"type":"string","format":"date-time","description":"Timestamp when the automation will be purged.","readOnly":true},"input_specs":{"type":"array","items":{"$ref":"#/components/schemas/v1AutomationInputSpec"},"description":"List of input specifications that define the parameters this automation accepts.\nThese specifications describe the expected inputs when the automation is executed."},"description":{"type":"string","description":"Provides additional context and documentation about the automation's purpose and behavior."},"latest_published_version":{"type":"string","title":"Semantic version of the latest published version of the automation (format: major.minor).\nIt will be null in case of no published version.\nExamples: \"0.1\", \"1.0\", \"2.0\"","readOnly":true},"author_id":{"type":"string","description":"The ID of the user who created this automation.","readOnly":true},"code_mapping":{"$ref":"#/components/schemas/v1CodeMapping"},"restore_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was restored from a previous version.\nOnly populated if the automation has been restored.","readOnly":true},"restore_version":{"type":"string","description":"The version string this automation was restored from (e.g., \"1.0\", \"2.1\").\nOnly populated if the automation has been restored.","readOnly":true},"restore_user_id":{"type":"string","description":"The ID of the user who restored this automation.\nOnly populated if the automation has been restored.","readOnly":true},"publish_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last published.\nOnly populated if the automation has been published.","readOnly":true},"publish_user_id":{"type":"string","description":"The ID of the user who last published this automation.\nOnly populated if the automation has been published.","readOnly":true},"activation_state":{"$ref":"#/components/schemas/v1AutomationActivationState"},"default_inputs":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/commonV1Value"},"description":"Default input values for this automation.\nKeys are input parameter names (matching AutomationInputSpec.name),\nvalues are the default values to use when inputs are not explicitly provided.\nThese are used to pre-populate inputs for manual runs and fill missing inputs\nfor trigger-based invocations.","readOnly":true},"marked_outputs":{"type":"array","items":{"type":"string"},"description":"List of output keys that have been marked by the user.\nThese keys identify specific outputs from the automation execution."}},"description":"Automation represents a unit of executable code with associated metadata and dependencies.\nAutomations can be in DRAFT or PUBLISHED state, where drafts can be modified and\npublished automations are immutable and executable.\nAutomation IDs are unique nano ID strings (21 characters, URL-safe: A-Za-z0-9_-).","required":["display_name"]},"v1BookConnection":{"type":"object","properties":{"connection_id":{"type":"string","description":"Unique identifier for this connection resource."},"endpoint":{"type":"string","description":"Endpoint for the connection."}},"description":"BookConnection is a resource representing a connection to a book instance.\nA connection has a unique identifier and an endpoint."},"v1AutomationInputSpec":{"type":"object","properties":{"name":{"type":"string","description":"The name of the input parameter."},"type":{"$ref":"#/components/schemas/v1ValueType"}},"description":"AutomationInputSpec defines the specification for an input parameter of an automation.","required":["name"]},"v1ValueType":{"type":"object","properties":{"scalar_type":{"$ref":"#/components/schemas/v1ValueScalarType"},"optional_type":{"$ref":"#/components/schemas/v1ValueOptionalType"},"list_type":{"$ref":"#/components/schemas/v1ValueListType"},"dictionary_type":{"$ref":"#/components/schemas/v1ValueDictionaryType"},"table_type":{"$ref":"#/components/schemas/v1ValueTableType"},"opaque_type":{"$ref":"#/components/schemas/v1ValueOpaqueType"},"any_type":{"$ref":"#/components/schemas/v1ValueAnyType"},"union_type":{"$ref":"#/components/schemas/v1ValueUnionType"},"sensitive_type":{"$ref":"#/components/schemas/v1ValueSensitiveType"},"enum_type":{"$ref":"#/components/schemas/v1ValueEnumType"},"generic_dictionary_type":{"$ref":"#/components/schemas/v1ValueGenericDictionaryType"}},"title":"Represents a complete value type definition using a discriminated union"},"v1ValueScalarType":{"type":"string","enum":["VALUE_SCALAR_TYPE_UNSPECIFIED","VALUE_SCALAR_TYPE_TEXT","VALUE_SCALAR_TYPE_NUMBER","VALUE_SCALAR_TYPE_BOOLEAN","VALUE_SCALAR_TYPE_DATETIME","VALUE_SCALAR_TYPE_DATE","VALUE_SCALAR_TYPE_TIME","VALUE_SCALAR_TYPE_FILE"],"default":"VALUE_SCALAR_TYPE_UNSPECIFIED","description":"- VALUE_SCALAR_TYPE_UNSPECIFIED: Unspecified value type\n - VALUE_SCALAR_TYPE_TEXT: A text value type\n - VALUE_SCALAR_TYPE_NUMBER: A number value type\n - VALUE_SCALAR_TYPE_BOOLEAN: A boolean value type\n - VALUE_SCALAR_TYPE_DATETIME: A datetime value type\n - VALUE_SCALAR_TYPE_DATE: A date value type\n - VALUE_SCALAR_TYPE_TIME: A time value type\n - VALUE_SCALAR_TYPE_FILE: A file value type","title":"Supported Value Scalar Types"},"v1ValueOptionalType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that can be optional (nullable)"},"v1ValueListType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a list/array value type containing elements of a specific type"},"v1ValueDictionaryType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this dictionary represents"},"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueDictionaryTypeField"},"title":"The named fields contained in this dictionary"},"description":{"type":"string","title":"Optional human-readable description of this dictionary type"}},"title":"Represents a dictionary/object value type with named fields"},"v1ValueDictionaryTypeField":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this field"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this field"}},"title":"Represents a single field within a dictionary value type"},"v1ValueTableType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this table represents"},"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueTableTypeColumn"},"title":"The columns that make up this table"},"description":{"type":"string","title":"Optional human-readable description of this table type"}},"title":"Represents a table value type with structured columns"},"v1ValueTableTypeColumn":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this column"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this column"}},"title":"Represents a single column within a table value type"},"v1ValueOpaqueType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this opaque type represents"},"description":{"type":"string","title":"Optional human-readable description of this opaque type"}},"title":"Represents an opaque value type with semantic meaning but unknown internal structure"},"v1ValueAnyType":{"type":"object","title":"Represents a value type that can hold any kind of value"},"v1ValueUnionType":{"type":"object","properties":{"inners":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueType"},"title":"The possible value types in this union"}},"title":"Represents a union value type that can be one of several possible types"},"v1ValueSensitiveType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that contains sensitive information"},"v1ValueEnumType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this enum represents"},"members":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueEnumTypeMember"},"title":"The available options/members of this enum"},"description":{"type":"string","title":"Optional human-readable description of this enum type"}},"title":"Represents an enumeration value type with predefined options"},"v1ValueEnumTypeMember":{"type":"object","properties":{"name":{"type":"string","title":"The programmatic name of this enum member"},"description":{"type":"string","title":"Optional human-readable description of this enum member"}},"title":"Represents a single member/option within an enum value type"},"v1ValueGenericDictionaryType":{"type":"object","properties":{"key_type":{"$ref":"#/components/schemas/v1ValueType"},"value_type":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represent a generic dictionary that can hold any entry of a particular key and value type"},"v1CodeMapping":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1CodeMappingEntry"},"description":"List of mapping entries that associate SPy code regions with English code regions.\nEach entry defines a paired relationship between a span in the SPy code and\na span in the English code representation."}},"description":"CodeMapping represents a bidirectional mapping between SPy (Subset-of-Python) code\nand English code locations within an automation. This mapping enables navigation between\nthe two representations, facilitating debugging, traceability, and synchronized editing.\nEach entry in the mapping associates a region in the SPy code with its corresponding\nregion in the English code. The mapping relationship is many-to-many and entries may\noverlap.","required":["entries"]},"v1CodeMappingEntry":{"type":"object","properties":{"spy_location":{"$ref":"#/components/schemas/commonV1Location"},"english_location":{"$ref":"#/components/schemas/commonV1Location"}},"description":"CodeMappingEntry represents a single mapping between a region in SPy code and\nits corresponding region in English code. This bidirectional association allows\nnavigation from SPy to English and vice versa, enabling synchronized views and\ndebugging across both representations of the automation logic.","required":["spy_location","english_location"]},"commonV1Location":{"type":"object","properties":{"start_byte":{"type":"string","format":"int64","title":"Starting Byte of the span, It will be zero-based"},"end_byte":{"type":"string","format":"int64","title":"Ending Byte(exclusive) of the span, It will be zero-based"}},"description":"Location represents a generic span within some underlying content.\nIt specifies the starting byte offset and the ending byte offset (exclusive) of the span.\nThis can be used for pointing to regions in files, buffers, logs, messages,\nor any other byte-addressable resource."},"v1AutomationActivationState":{"type":"string","enum":["AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","AUTOMATION_ACTIVATION_STATE_ACTIVE","AUTOMATION_ACTIVATION_STATE_DEACTIVATED"],"default":"AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","description":"Activation state of a published automation.\nControls whether the automation can execute published runs.\n\n - AUTOMATION_ACTIVATION_STATE_UNSPECIFIED: Unspecified state. Used when automation has no published version.\nActivation state is only meaningful after publishing.\n - AUTOMATION_ACTIVATION_STATE_ACTIVE: Automation is active and can execute published runs.\n - AUTOMATION_ACTIVATION_STATE_DEACTIVATED: Automation is deactivated and cannot execute published runs.\nEvents will be logged but not executed."},"commonV1Value":{"type":"object","properties":{"null_value":{"type":"string","title":"Represents the absence of a value (None/null/undefined)"},"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"},"duration":{"type":"string","title":"Signed duration representing a span of time"},"list":{"$ref":"#/components/schemas/v1List"},"dictionary":{"$ref":"#/components/schemas/v1Dictionary"},"file":{"$ref":"#/components/schemas/v1FileValue"},"table":{"$ref":"#/components/schemas/v1TableValue"},"set":{"$ref":"#/components/schemas/v1Set"}},"description":"Represents a runtime value that can be produced by the Jarvis interpreter.\n\nThis message provides a type-safe way to serialize and transmit values between\nthe Jarvis interpreter and other services via gRPC. It supports all the basic\ndata types that can be represented in the Jarvis language runtime.\n\nThe oneof structure ensures that exactly one value type is set at a time,\nproviding both type safety and efficient serialization."},"v1Number":{"type":"object","properties":{"lo":{"type":"integer","format":"int64","description":"Low 32 bits of the 96-bit mantissa."},"mid":{"type":"integer","format":"int64","description":"Middle 32 bits of the 96-bit mantissa."},"hi":{"type":"integer","format":"int64","description":"High 32 bits of the 96-bit mantissa."},"flags":{"type":"integer","format":"int64","description":"Flags word:\n - Bits 16–23: scale (0–28)\n - Bit 31: sign (0 = positive, 1 = negative)\n - Other bits must be zero."}},"description":"A fixed-precision decimal number with up to 28 fractional digits.\n\nThis message represents decimal numbers with exact precision, avoiding\nfloating-point rounding errors. It's particularly useful for financial\ncalculations, measurements, and any scenario where exact decimal\nrepresentation is required.\n\nThe value is calculated as: m / 10^e, where:\n - m is an unsigned 96-bit integer composed of (lo, mid, hi)\n - e is the scale (0–28) stored in flags bits 16–23\n - sign is encoded in flags bit 31 (0 = positive, 1 = negative)\n\nExamples:\n - 123.45 would have m=12345, e=2\n - -0.001 would have m=1, e=3, with sign bit set\n"},"typeDate":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year."},"month":{"type":"integer","format":"int32","description":"Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day."},"day":{"type":"integer","format":"int32","description":"Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant."}},"description":"* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.","title":"Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:"},"typeTimeOfDay":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","description":"Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time."},"minutes":{"type":"integer","format":"int32","description":"Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."}},"description":"Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`."},"typeDateTime":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a\ndatetime without a year."},"month":{"type":"integer","format":"int32","description":"Required. Month of year. Must be from 1 to 12."},"day":{"type":"integer","format":"int32","description":"Required. Day of month. Must be from 1 to 31 and valid for the year and\nmonth."},"hours":{"type":"integer","format":"int32","description":"Required. Hours of day in 24 hour format. Should be from 0 to 23. An API\nmay choose to allow the value \"24:00:00\" for scenarios like business\nclosing time."},"minutes":{"type":"integer","format":"int32","description":"Required. Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Required. Seconds of minutes of the time. Must normally be from 0 to 59. An\nAPI may allow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Required. Fractions of seconds in nanoseconds. Must be from 0 to\n999,999,999."},"utc_offset":{"type":"string","description":"UTC offset. Must be whole seconds, between -18 hours and +18 hours.\nFor example, a UTC offset of -4:00 would be represented as\n{ seconds: -14400 }."},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"}},"description":"Represents civil time (or occasionally physical time).\n\nThis type can represent a civil time in one of a few possible ways:\n\n * When utc_offset is set and time_zone is unset: a civil time on a calendar\n   day with a particular offset from UTC.\n * When time_zone is set and utc_offset is unset: a civil time on a calendar\n   day in a particular time zone.\n * When neither time_zone nor utc_offset is set: a civil time on a calendar\n   day in local time.\n\nThe date is relative to the Proleptic Gregorian Calendar.\n\nIf year is 0, the DateTime is considered not to have a specific year. month\nand day must have valid, non-zero values.\n\nThis type may also be used to represent a physical time if all the date and\ntime fields are set and either case of the `time_offset` oneof is set.\nConsider using `Timestamp` message for physical time instead. If your use\ncase also would like to store the user's timezone, that can be done in\nanother field.\n\nThis type is more flexible than some applications may want. Make sure to\ndocument and validate your application's limitations."},"typeTimeZone":{"type":"object","properties":{"id":{"type":"string","description":"IANA Time Zone Database time zone, e.g. \"America/New_York\"."},"version":{"type":"string","description":"Optional. IANA Time Zone Database version number, e.g. \"2019a\"."}},"description":"Represents a time zone from the\n[IANA Time Zone Database](https://www.iana.org/time-zones)."},"v1List":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/commonV1Value"},"title":"The ordered sequence of values in this list"}},"description":"Represents an ordered collection of values (similar to arrays or lists).\n\nThis message can contain any number of Value elements in a specific order.\nLists are mutable and can grow or shrink during runtime. Elements can be\naccessed by their zero-based index position.\n\nExamples:\n - [1, 2, 3] - list of numbers\n - [\"hello\", \"world\"] - list of strings\n - [true, 42, \"mixed\"] - list with mixed types\n - [[1, 2], [3, 4]] - nested lists"},"v1Dictionary":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryEntry"},"title":"The key-value pairs stored in this dictionary"}},"description":"Represents a key-value mapping (similar to hash maps or dictionaries).\n\nThis message stores associations between keys and values, where keys must be\nhashable types (null, bool, Number, string, Date, TimeOfDay, DateTime, TimeZone). Keys are\nunique within a dictionary - duplicate keys will overwrite previous values.\n\nThe dictionary maintains insertion order for consistent iteration behavior.\n\nExamples:\n - {\"name\": \"John\", \"age\": 30} - string keys with mixed values\n - {1: \"one\", 2: \"two\"} - number keys with string values\n - {\"nested\": {\"inner\": \"value\"}} - nested dictionaries"},"v1DictionaryEntry":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/v1HashableValue"},"value":{"$ref":"#/components/schemas/commonV1Value"}},"description":"Represents a single key-value pair within a Dictionary.\n\nBoth key and value can be any Value type, though keys should be\nhashable types for proper dictionary behavior. Non-hashable keys\n(like lists or dictionaries) may cause runtime errors."},"v1HashableValue":{"type":"object","properties":{"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"duration":{"type":"string","title":"Signed duration representing a span of time"}},"description":"Represents a hashable value that can be used as a dictionary key.\n\nThis message contains only the hashable types from the Value message,\ncorresponding to Python's hashable types. These types can be safely\nused as keys in maps and dictionaries.\n\nHashable types include: bool, Number, string, Date, TimeOfDay, DateTime\nand Duration."},"v1FileValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1File"}},"title":"A file value represents a file that can be either inline or remote"},"v1File":{"type":"object","properties":{"file_name":{"type":"string","title":"The name of the file"},"content":{"type":"string","format":"byte","title":"Content of the file as a byte stream"}}},"v1TableValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1Table"}},"title":"A table that is represented remote as an URL to a file that is Feather-formatted\nor inline via the Table message"},"v1Table":{"type":"object","properties":{"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1Column"}}},"description":"A table is a column-oriented structure. All the values inside each column must\nbe of equal length."},"v1Column":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"}},"name":{"type":"string"}}},"bdkV1Value":{"type":"object","properties":{"null_value":{"type":"string"},"conceptual_value":{"$ref":"#/components/schemas/v1NounPhrase"},"text_value":{"type":"string"},"number_value":{"type":"number","format":"double"},"boolean_value":{"type":"boolean"},"datetime_value":{"type":"string","format":"date-time"},"date_value":{"$ref":"#/components/schemas/v1Date"},"time_value":{"$ref":"#/components/schemas/v1Time"},"file_value":{"$ref":"#/components/schemas/v1FileValue"},"dictionary_value":{"$ref":"#/components/schemas/v1DictionaryValue"},"list_value":{"$ref":"#/components/schemas/bdkV1ListValue"},"opaque_value":{"$ref":"#/components/schemas/v1OpaqueValue"},"table_value":{"$ref":"#/components/schemas/v1TableValue"},"sensitive_value":{"$ref":"#/components/schemas/v1SensitiveValue"}},"title":"A union of all possible values"},"v1NounPhrase":{"type":"object","properties":{"modifiers":{"type":"array","items":{"type":"string"},"title":"Optional adjectives attached to the noun"},"head":{"type":"string","title":"Noun of the phrase"}}},"v1Date":{"type":"object","properties":{"year":{"type":"integer","format":"int32","title":"Year of the date"},"month":{"type":"integer","format":"int32","title":"Month of a year"},"day":{"type":"integer","format":"int32","title":"Day of a month"}}},"v1Time":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","title":"Hours of day"},"minutes":{"type":"integer","format":"int32","title":"Minutes of hour of day"},"seconds":{"type":"integer","format":"int32","title":"Seconds of minutes of the time"},"nanos":{"type":"integer","format":"int32","title":"Fractions of seconds in nanoseconds"}}},"v1DictionaryValue":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryValueField"},"title":"All the fields alongside their values in the dictionary"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the dictionary"}},"title":"Value to be used when the type is dictionary"},"v1DictionaryValueField":{"type":"object","properties":{"key":{"type":"string"},"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"Each key-value pair inside a dictionary"},"bdkV1ListValue":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"},"title":"All the values inside the list"}},"title":"A collection of values"},"v1OpaqueValue":{"type":"object","properties":{"content":{"type":"string","format":"byte","title":"Content of the opaque value"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the opaque"}}},"v1SensitiveValue":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"A sensitive value is any value marked as sensitive (to prevent exposure)"},"v1Set":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/v1HashableValue"},"title":"The unique elements stored in this set\nAll elements must be hashable types"}},"description":"Represents an unordered collection of unique values.\n\nThis message stores a collection of unique elements, where duplicate values\nare automatically removed. Only hashable types can be stored in sets.\nSets are useful for membership testing, removing duplicates, and mathematical\nset operations like union, intersection, and difference.\n\nThe set does not maintain insertion order - elements may appear in any order\nduring iteration.\n\nExamples:\n - {1, 2, 3} - set of numbers\n - {\"apple\", \"banana\", \"cherry\"} - set of strings\n - {true, false} - set of booleans\n - {1, \"hello\", true} - set with mixed hashable types"},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"UpgradeAutomationConnectionsBody":{"type":"object","properties":{"upgrades":{"type":"array","items":{"$ref":"#/components/schemas/v1ConnectionReplacement"},"description":"List of connections to upgrade. All upgrades are performed atomically:\neither all succeed or all fail. The automation version is incremented once\nfor all upgrades.\n\nEach old_connection_id must be unique within the list. If the same old_connection_id\nappears multiple times, the request will fail with INVALID_ARGUMENT."}},"description":"UpgradeAutomationConnectionsRequest specifies which connections to upgrade in a draft automation.","required":["upgrades"]},"v1ConnectionReplacement":{"type":"object","properties":{"old_connection_id":{"type":"string","description":"The current connection ID to replace.\nThis connection ID must exist in the automation."},"new_connection_id":{"type":"string","title":"The new connection ID to use as replacement.\nThis connection must:\n- Exist in the workspace\n- Have the same book_name as the old connection\n- Have the same book_version as the old connection"},"connection_alias":{"type":"string","description":"The alias of the connection to use as replacement.\nThis alias must be unique within the automation."}},"description":"ConnectionReplacement specifies replacing one connection ID with another.","required":["old_connection_id","new_connection_id","connection_alias"]}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}:upgradeConnections":{"post":{"summary":"Upgrade Automation Connections","description":"Multiple connections can be upgraded in a single atomic operation. All upgrades succeed\ntogether or all fail together. The automation version is incremented once for all upgrades.\n\nThis operation only works on draft automations. To upgrade connections in a published\nautomation, first use ForkPublishedAutomation to create a draft, then call this method.\n\nPer AIP-136, this is a custom method using the :upgradeConnections suffix.","operationId":"UpgradeAutomationConnections","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1UpgradeAutomationConnectionsResponse"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpgradeAutomationConnectionsBody"}}},"required":true},"tags":["Automations"]}}}}
```

## Switch Automation Connections

> Multiple connections can be switched in a single atomic operation. All switches succeed\
> together or all fail together. The automation version is incremented once for all switches.\
> \
> This operation only works on draft automations. To switch connections in a published\
> automation, first use ForkPublishedAutomation to create a draft, then call this method.\
> \
> Per AIP-136, this is a custom method using the :switchConnections suffix.

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1SwitchAutomationConnectionsResponse":{"type":"object","properties":{"automation":{"$ref":"#/components/schemas/v1Automation"}},"description":"SwitchAutomationConnectionsResponse returns the updated automation."},"v1Automation":{"type":"object","properties":{"name":{"type":"string","title":"The automation name (e.g. 'automations/{automation}')"},"display_name":{"type":"string","description":"Human-readable name of the automation for identification and display.\nMust be unique within the user's namespace."},"english_code":{"type":"string","description":"User-facing English description code that explains what the automation does.\nThis is a human-readable representation of the automation's purpose and logic."},"code":{"type":"string","description":"SPy (Subset-of Python) executable code that defines the automation logic.\nThis code is executed when the automation is invoked with inputs."},"artifacts":{"type":"object","additionalProperties":{"type":"string","format":"byte"},"description":"Additional artifacts associated with the automation (e.g., data files, configurations).\nKeys are artifact names, values are the binary content of the artifacts.\nThese artifacts are available to the automation during execution."},"create_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was originally created.\nThis value never changes after creation.","readOnly":true},"version":{"type":"string","title":"Semantic version of this specific version of the automation (format: major.minor).\nIncremented each time the automation is updated or published.\nExamples: \"0.1\", \"1.0\", \"1.1\", \"2.0\"","readOnly":true},"connections":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v1BookConnection"},"description":"Book connections required by this automation for execution.\nMaps connection names to their metadata.\nThese connections are resolved and made available during automation execution."},"update_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last updated.\nUpdated whenever the automation metadata, code, or dependencies change.","readOnly":true},"update_user_id":{"type":"string","description":"The ID of the user who last updated this automation.","readOnly":true},"delete_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was deleted.","readOnly":true},"purge_time":{"type":"string","format":"date-time","description":"Timestamp when the automation will be purged.","readOnly":true},"input_specs":{"type":"array","items":{"$ref":"#/components/schemas/v1AutomationInputSpec"},"description":"List of input specifications that define the parameters this automation accepts.\nThese specifications describe the expected inputs when the automation is executed."},"description":{"type":"string","description":"Provides additional context and documentation about the automation's purpose and behavior."},"latest_published_version":{"type":"string","title":"Semantic version of the latest published version of the automation (format: major.minor).\nIt will be null in case of no published version.\nExamples: \"0.1\", \"1.0\", \"2.0\"","readOnly":true},"author_id":{"type":"string","description":"The ID of the user who created this automation.","readOnly":true},"code_mapping":{"$ref":"#/components/schemas/v1CodeMapping"},"restore_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was restored from a previous version.\nOnly populated if the automation has been restored.","readOnly":true},"restore_version":{"type":"string","description":"The version string this automation was restored from (e.g., \"1.0\", \"2.1\").\nOnly populated if the automation has been restored.","readOnly":true},"restore_user_id":{"type":"string","description":"The ID of the user who restored this automation.\nOnly populated if the automation has been restored.","readOnly":true},"publish_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last published.\nOnly populated if the automation has been published.","readOnly":true},"publish_user_id":{"type":"string","description":"The ID of the user who last published this automation.\nOnly populated if the automation has been published.","readOnly":true},"activation_state":{"$ref":"#/components/schemas/v1AutomationActivationState"},"default_inputs":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/commonV1Value"},"description":"Default input values for this automation.\nKeys are input parameter names (matching AutomationInputSpec.name),\nvalues are the default values to use when inputs are not explicitly provided.\nThese are used to pre-populate inputs for manual runs and fill missing inputs\nfor trigger-based invocations.","readOnly":true},"marked_outputs":{"type":"array","items":{"type":"string"},"description":"List of output keys that have been marked by the user.\nThese keys identify specific outputs from the automation execution."}},"description":"Automation represents a unit of executable code with associated metadata and dependencies.\nAutomations can be in DRAFT or PUBLISHED state, where drafts can be modified and\npublished automations are immutable and executable.\nAutomation IDs are unique nano ID strings (21 characters, URL-safe: A-Za-z0-9_-).","required":["display_name"]},"v1BookConnection":{"type":"object","properties":{"connection_id":{"type":"string","description":"Unique identifier for this connection resource."},"endpoint":{"type":"string","description":"Endpoint for the connection."}},"description":"BookConnection is a resource representing a connection to a book instance.\nA connection has a unique identifier and an endpoint."},"v1AutomationInputSpec":{"type":"object","properties":{"name":{"type":"string","description":"The name of the input parameter."},"type":{"$ref":"#/components/schemas/v1ValueType"}},"description":"AutomationInputSpec defines the specification for an input parameter of an automation.","required":["name"]},"v1ValueType":{"type":"object","properties":{"scalar_type":{"$ref":"#/components/schemas/v1ValueScalarType"},"optional_type":{"$ref":"#/components/schemas/v1ValueOptionalType"},"list_type":{"$ref":"#/components/schemas/v1ValueListType"},"dictionary_type":{"$ref":"#/components/schemas/v1ValueDictionaryType"},"table_type":{"$ref":"#/components/schemas/v1ValueTableType"},"opaque_type":{"$ref":"#/components/schemas/v1ValueOpaqueType"},"any_type":{"$ref":"#/components/schemas/v1ValueAnyType"},"union_type":{"$ref":"#/components/schemas/v1ValueUnionType"},"sensitive_type":{"$ref":"#/components/schemas/v1ValueSensitiveType"},"enum_type":{"$ref":"#/components/schemas/v1ValueEnumType"},"generic_dictionary_type":{"$ref":"#/components/schemas/v1ValueGenericDictionaryType"}},"title":"Represents a complete value type definition using a discriminated union"},"v1ValueScalarType":{"type":"string","enum":["VALUE_SCALAR_TYPE_UNSPECIFIED","VALUE_SCALAR_TYPE_TEXT","VALUE_SCALAR_TYPE_NUMBER","VALUE_SCALAR_TYPE_BOOLEAN","VALUE_SCALAR_TYPE_DATETIME","VALUE_SCALAR_TYPE_DATE","VALUE_SCALAR_TYPE_TIME","VALUE_SCALAR_TYPE_FILE"],"default":"VALUE_SCALAR_TYPE_UNSPECIFIED","description":"- VALUE_SCALAR_TYPE_UNSPECIFIED: Unspecified value type\n - VALUE_SCALAR_TYPE_TEXT: A text value type\n - VALUE_SCALAR_TYPE_NUMBER: A number value type\n - VALUE_SCALAR_TYPE_BOOLEAN: A boolean value type\n - VALUE_SCALAR_TYPE_DATETIME: A datetime value type\n - VALUE_SCALAR_TYPE_DATE: A date value type\n - VALUE_SCALAR_TYPE_TIME: A time value type\n - VALUE_SCALAR_TYPE_FILE: A file value type","title":"Supported Value Scalar Types"},"v1ValueOptionalType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that can be optional (nullable)"},"v1ValueListType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a list/array value type containing elements of a specific type"},"v1ValueDictionaryType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this dictionary represents"},"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueDictionaryTypeField"},"title":"The named fields contained in this dictionary"},"description":{"type":"string","title":"Optional human-readable description of this dictionary type"}},"title":"Represents a dictionary/object value type with named fields"},"v1ValueDictionaryTypeField":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this field"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this field"}},"title":"Represents a single field within a dictionary value type"},"v1ValueTableType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this table represents"},"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueTableTypeColumn"},"title":"The columns that make up this table"},"description":{"type":"string","title":"Optional human-readable description of this table type"}},"title":"Represents a table value type with structured columns"},"v1ValueTableTypeColumn":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this column"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this column"}},"title":"Represents a single column within a table value type"},"v1ValueOpaqueType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this opaque type represents"},"description":{"type":"string","title":"Optional human-readable description of this opaque type"}},"title":"Represents an opaque value type with semantic meaning but unknown internal structure"},"v1ValueAnyType":{"type":"object","title":"Represents a value type that can hold any kind of value"},"v1ValueUnionType":{"type":"object","properties":{"inners":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueType"},"title":"The possible value types in this union"}},"title":"Represents a union value type that can be one of several possible types"},"v1ValueSensitiveType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that contains sensitive information"},"v1ValueEnumType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this enum represents"},"members":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueEnumTypeMember"},"title":"The available options/members of this enum"},"description":{"type":"string","title":"Optional human-readable description of this enum type"}},"title":"Represents an enumeration value type with predefined options"},"v1ValueEnumTypeMember":{"type":"object","properties":{"name":{"type":"string","title":"The programmatic name of this enum member"},"description":{"type":"string","title":"Optional human-readable description of this enum member"}},"title":"Represents a single member/option within an enum value type"},"v1ValueGenericDictionaryType":{"type":"object","properties":{"key_type":{"$ref":"#/components/schemas/v1ValueType"},"value_type":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represent a generic dictionary that can hold any entry of a particular key and value type"},"v1CodeMapping":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1CodeMappingEntry"},"description":"List of mapping entries that associate SPy code regions with English code regions.\nEach entry defines a paired relationship between a span in the SPy code and\na span in the English code representation."}},"description":"CodeMapping represents a bidirectional mapping between SPy (Subset-of-Python) code\nand English code locations within an automation. This mapping enables navigation between\nthe two representations, facilitating debugging, traceability, and synchronized editing.\nEach entry in the mapping associates a region in the SPy code with its corresponding\nregion in the English code. The mapping relationship is many-to-many and entries may\noverlap.","required":["entries"]},"v1CodeMappingEntry":{"type":"object","properties":{"spy_location":{"$ref":"#/components/schemas/commonV1Location"},"english_location":{"$ref":"#/components/schemas/commonV1Location"}},"description":"CodeMappingEntry represents a single mapping between a region in SPy code and\nits corresponding region in English code. This bidirectional association allows\nnavigation from SPy to English and vice versa, enabling synchronized views and\ndebugging across both representations of the automation logic.","required":["spy_location","english_location"]},"commonV1Location":{"type":"object","properties":{"start_byte":{"type":"string","format":"int64","title":"Starting Byte of the span, It will be zero-based"},"end_byte":{"type":"string","format":"int64","title":"Ending Byte(exclusive) of the span, It will be zero-based"}},"description":"Location represents a generic span within some underlying content.\nIt specifies the starting byte offset and the ending byte offset (exclusive) of the span.\nThis can be used for pointing to regions in files, buffers, logs, messages,\nor any other byte-addressable resource."},"v1AutomationActivationState":{"type":"string","enum":["AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","AUTOMATION_ACTIVATION_STATE_ACTIVE","AUTOMATION_ACTIVATION_STATE_DEACTIVATED"],"default":"AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","description":"Activation state of a published automation.\nControls whether the automation can execute published runs.\n\n - AUTOMATION_ACTIVATION_STATE_UNSPECIFIED: Unspecified state. Used when automation has no published version.\nActivation state is only meaningful after publishing.\n - AUTOMATION_ACTIVATION_STATE_ACTIVE: Automation is active and can execute published runs.\n - AUTOMATION_ACTIVATION_STATE_DEACTIVATED: Automation is deactivated and cannot execute published runs.\nEvents will be logged but not executed."},"commonV1Value":{"type":"object","properties":{"null_value":{"type":"string","title":"Represents the absence of a value (None/null/undefined)"},"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"},"duration":{"type":"string","title":"Signed duration representing a span of time"},"list":{"$ref":"#/components/schemas/v1List"},"dictionary":{"$ref":"#/components/schemas/v1Dictionary"},"file":{"$ref":"#/components/schemas/v1FileValue"},"table":{"$ref":"#/components/schemas/v1TableValue"},"set":{"$ref":"#/components/schemas/v1Set"}},"description":"Represents a runtime value that can be produced by the Jarvis interpreter.\n\nThis message provides a type-safe way to serialize and transmit values between\nthe Jarvis interpreter and other services via gRPC. It supports all the basic\ndata types that can be represented in the Jarvis language runtime.\n\nThe oneof structure ensures that exactly one value type is set at a time,\nproviding both type safety and efficient serialization."},"v1Number":{"type":"object","properties":{"lo":{"type":"integer","format":"int64","description":"Low 32 bits of the 96-bit mantissa."},"mid":{"type":"integer","format":"int64","description":"Middle 32 bits of the 96-bit mantissa."},"hi":{"type":"integer","format":"int64","description":"High 32 bits of the 96-bit mantissa."},"flags":{"type":"integer","format":"int64","description":"Flags word:\n - Bits 16–23: scale (0–28)\n - Bit 31: sign (0 = positive, 1 = negative)\n - Other bits must be zero."}},"description":"A fixed-precision decimal number with up to 28 fractional digits.\n\nThis message represents decimal numbers with exact precision, avoiding\nfloating-point rounding errors. It's particularly useful for financial\ncalculations, measurements, and any scenario where exact decimal\nrepresentation is required.\n\nThe value is calculated as: m / 10^e, where:\n - m is an unsigned 96-bit integer composed of (lo, mid, hi)\n - e is the scale (0–28) stored in flags bits 16–23\n - sign is encoded in flags bit 31 (0 = positive, 1 = negative)\n\nExamples:\n - 123.45 would have m=12345, e=2\n - -0.001 would have m=1, e=3, with sign bit set\n"},"typeDate":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year."},"month":{"type":"integer","format":"int32","description":"Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day."},"day":{"type":"integer","format":"int32","description":"Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant."}},"description":"* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.","title":"Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:"},"typeTimeOfDay":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","description":"Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time."},"minutes":{"type":"integer","format":"int32","description":"Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."}},"description":"Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`."},"typeDateTime":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a\ndatetime without a year."},"month":{"type":"integer","format":"int32","description":"Required. Month of year. Must be from 1 to 12."},"day":{"type":"integer","format":"int32","description":"Required. Day of month. Must be from 1 to 31 and valid for the year and\nmonth."},"hours":{"type":"integer","format":"int32","description":"Required. Hours of day in 24 hour format. Should be from 0 to 23. An API\nmay choose to allow the value \"24:00:00\" for scenarios like business\nclosing time."},"minutes":{"type":"integer","format":"int32","description":"Required. Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Required. Seconds of minutes of the time. Must normally be from 0 to 59. An\nAPI may allow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Required. Fractions of seconds in nanoseconds. Must be from 0 to\n999,999,999."},"utc_offset":{"type":"string","description":"UTC offset. Must be whole seconds, between -18 hours and +18 hours.\nFor example, a UTC offset of -4:00 would be represented as\n{ seconds: -14400 }."},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"}},"description":"Represents civil time (or occasionally physical time).\n\nThis type can represent a civil time in one of a few possible ways:\n\n * When utc_offset is set and time_zone is unset: a civil time on a calendar\n   day with a particular offset from UTC.\n * When time_zone is set and utc_offset is unset: a civil time on a calendar\n   day in a particular time zone.\n * When neither time_zone nor utc_offset is set: a civil time on a calendar\n   day in local time.\n\nThe date is relative to the Proleptic Gregorian Calendar.\n\nIf year is 0, the DateTime is considered not to have a specific year. month\nand day must have valid, non-zero values.\n\nThis type may also be used to represent a physical time if all the date and\ntime fields are set and either case of the `time_offset` oneof is set.\nConsider using `Timestamp` message for physical time instead. If your use\ncase also would like to store the user's timezone, that can be done in\nanother field.\n\nThis type is more flexible than some applications may want. Make sure to\ndocument and validate your application's limitations."},"typeTimeZone":{"type":"object","properties":{"id":{"type":"string","description":"IANA Time Zone Database time zone, e.g. \"America/New_York\"."},"version":{"type":"string","description":"Optional. IANA Time Zone Database version number, e.g. \"2019a\"."}},"description":"Represents a time zone from the\n[IANA Time Zone Database](https://www.iana.org/time-zones)."},"v1List":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/commonV1Value"},"title":"The ordered sequence of values in this list"}},"description":"Represents an ordered collection of values (similar to arrays or lists).\n\nThis message can contain any number of Value elements in a specific order.\nLists are mutable and can grow or shrink during runtime. Elements can be\naccessed by their zero-based index position.\n\nExamples:\n - [1, 2, 3] - list of numbers\n - [\"hello\", \"world\"] - list of strings\n - [true, 42, \"mixed\"] - list with mixed types\n - [[1, 2], [3, 4]] - nested lists"},"v1Dictionary":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryEntry"},"title":"The key-value pairs stored in this dictionary"}},"description":"Represents a key-value mapping (similar to hash maps or dictionaries).\n\nThis message stores associations between keys and values, where keys must be\nhashable types (null, bool, Number, string, Date, TimeOfDay, DateTime, TimeZone). Keys are\nunique within a dictionary - duplicate keys will overwrite previous values.\n\nThe dictionary maintains insertion order for consistent iteration behavior.\n\nExamples:\n - {\"name\": \"John\", \"age\": 30} - string keys with mixed values\n - {1: \"one\", 2: \"two\"} - number keys with string values\n - {\"nested\": {\"inner\": \"value\"}} - nested dictionaries"},"v1DictionaryEntry":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/v1HashableValue"},"value":{"$ref":"#/components/schemas/commonV1Value"}},"description":"Represents a single key-value pair within a Dictionary.\n\nBoth key and value can be any Value type, though keys should be\nhashable types for proper dictionary behavior. Non-hashable keys\n(like lists or dictionaries) may cause runtime errors."},"v1HashableValue":{"type":"object","properties":{"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"duration":{"type":"string","title":"Signed duration representing a span of time"}},"description":"Represents a hashable value that can be used as a dictionary key.\n\nThis message contains only the hashable types from the Value message,\ncorresponding to Python's hashable types. These types can be safely\nused as keys in maps and dictionaries.\n\nHashable types include: bool, Number, string, Date, TimeOfDay, DateTime\nand Duration."},"v1FileValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1File"}},"title":"A file value represents a file that can be either inline or remote"},"v1File":{"type":"object","properties":{"file_name":{"type":"string","title":"The name of the file"},"content":{"type":"string","format":"byte","title":"Content of the file as a byte stream"}}},"v1TableValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1Table"}},"title":"A table that is represented remote as an URL to a file that is Feather-formatted\nor inline via the Table message"},"v1Table":{"type":"object","properties":{"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1Column"}}},"description":"A table is a column-oriented structure. All the values inside each column must\nbe of equal length."},"v1Column":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"}},"name":{"type":"string"}}},"bdkV1Value":{"type":"object","properties":{"null_value":{"type":"string"},"conceptual_value":{"$ref":"#/components/schemas/v1NounPhrase"},"text_value":{"type":"string"},"number_value":{"type":"number","format":"double"},"boolean_value":{"type":"boolean"},"datetime_value":{"type":"string","format":"date-time"},"date_value":{"$ref":"#/components/schemas/v1Date"},"time_value":{"$ref":"#/components/schemas/v1Time"},"file_value":{"$ref":"#/components/schemas/v1FileValue"},"dictionary_value":{"$ref":"#/components/schemas/v1DictionaryValue"},"list_value":{"$ref":"#/components/schemas/bdkV1ListValue"},"opaque_value":{"$ref":"#/components/schemas/v1OpaqueValue"},"table_value":{"$ref":"#/components/schemas/v1TableValue"},"sensitive_value":{"$ref":"#/components/schemas/v1SensitiveValue"}},"title":"A union of all possible values"},"v1NounPhrase":{"type":"object","properties":{"modifiers":{"type":"array","items":{"type":"string"},"title":"Optional adjectives attached to the noun"},"head":{"type":"string","title":"Noun of the phrase"}}},"v1Date":{"type":"object","properties":{"year":{"type":"integer","format":"int32","title":"Year of the date"},"month":{"type":"integer","format":"int32","title":"Month of a year"},"day":{"type":"integer","format":"int32","title":"Day of a month"}}},"v1Time":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","title":"Hours of day"},"minutes":{"type":"integer","format":"int32","title":"Minutes of hour of day"},"seconds":{"type":"integer","format":"int32","title":"Seconds of minutes of the time"},"nanos":{"type":"integer","format":"int32","title":"Fractions of seconds in nanoseconds"}}},"v1DictionaryValue":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryValueField"},"title":"All the fields alongside their values in the dictionary"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the dictionary"}},"title":"Value to be used when the type is dictionary"},"v1DictionaryValueField":{"type":"object","properties":{"key":{"type":"string"},"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"Each key-value pair inside a dictionary"},"bdkV1ListValue":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"},"title":"All the values inside the list"}},"title":"A collection of values"},"v1OpaqueValue":{"type":"object","properties":{"content":{"type":"string","format":"byte","title":"Content of the opaque value"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the opaque"}}},"v1SensitiveValue":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"A sensitive value is any value marked as sensitive (to prevent exposure)"},"v1Set":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/v1HashableValue"},"title":"The unique elements stored in this set\nAll elements must be hashable types"}},"description":"Represents an unordered collection of unique values.\n\nThis message stores a collection of unique elements, where duplicate values\nare automatically removed. Only hashable types can be stored in sets.\nSets are useful for membership testing, removing duplicates, and mathematical\nset operations like union, intersection, and difference.\n\nThe set does not maintain insertion order - elements may appear in any order\nduring iteration.\n\nExamples:\n - {1, 2, 3} - set of numbers\n - {\"apple\", \"banana\", \"cherry\"} - set of strings\n - {true, false} - set of booleans\n - {1, \"hello\", true} - set with mixed hashable types"},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"SwitchAutomationConnectionsBody":{"type":"object","properties":{"switches":{"type":"array","items":{"$ref":"#/components/schemas/v1ConnectionReplacement"},"description":"List of connections to switch. All switches are performed atomically:\neither all succeed or all fail. The automation version is incremented once\nfor all switches.\n\nEach old_connection_id must be unique within the list. If the same old_connection_id\nappears multiple times, the request will fail with INVALID_ARGUMENT."}},"description":"SwitchAutomationConnectionsRequest specifies which connections to switch in a draft automation.","required":["switches"]},"v1ConnectionReplacement":{"type":"object","properties":{"old_connection_id":{"type":"string","description":"The current connection ID to replace.\nThis connection ID must exist in the automation."},"new_connection_id":{"type":"string","title":"The new connection ID to use as replacement.\nThis connection must:\n- Exist in the workspace\n- Have the same book_name as the old connection\n- Have the same book_version as the old connection"},"connection_alias":{"type":"string","description":"The alias of the connection to use as replacement.\nThis alias must be unique within the automation."}},"description":"ConnectionReplacement specifies replacing one connection ID with another.","required":["old_connection_id","new_connection_id","connection_alias"]}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}:switchConnections":{"post":{"summary":"Switch Automation Connections","description":"Multiple connections can be switched in a single atomic operation. All switches succeed\ntogether or all fail together. The automation version is incremented once for all switches.\n\nThis operation only works on draft automations. To switch connections in a published\nautomation, first use ForkPublishedAutomation to create a draft, then call this method.\n\nPer AIP-136, this is a custom method using the :switchConnections suffix.","operationId":"SwitchAutomationConnections","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1SwitchAutomationConnectionsResponse"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwitchAutomationConnectionsBody"}}},"required":true},"tags":["Automations"]}}}}
```

## Remove Automation Connections

> Multiple connections can be removed in a single atomic operation. All removals succeed\
> together or all fail together. The automation version is incremented once for all removals.\
> \
> This operation only works on draft automations. To remove connections in a published\
> automation, first use ForkPublishedAutomation to create a draft, then call this method.\
> \
> Per AIP-136, this is a custom method using the :removeConnections suffix.

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1RemoveAutomationConnectionsResponse":{"type":"object","properties":{"automation":{"$ref":"#/components/schemas/v1Automation"}},"description":"RemoveAutomationConnectionsResponse returns the updated automation."},"v1Automation":{"type":"object","properties":{"name":{"type":"string","title":"The automation name (e.g. 'automations/{automation}')"},"display_name":{"type":"string","description":"Human-readable name of the automation for identification and display.\nMust be unique within the user's namespace."},"english_code":{"type":"string","description":"User-facing English description code that explains what the automation does.\nThis is a human-readable representation of the automation's purpose and logic."},"code":{"type":"string","description":"SPy (Subset-of Python) executable code that defines the automation logic.\nThis code is executed when the automation is invoked with inputs."},"artifacts":{"type":"object","additionalProperties":{"type":"string","format":"byte"},"description":"Additional artifacts associated with the automation (e.g., data files, configurations).\nKeys are artifact names, values are the binary content of the artifacts.\nThese artifacts are available to the automation during execution."},"create_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was originally created.\nThis value never changes after creation.","readOnly":true},"version":{"type":"string","title":"Semantic version of this specific version of the automation (format: major.minor).\nIncremented each time the automation is updated or published.\nExamples: \"0.1\", \"1.0\", \"1.1\", \"2.0\"","readOnly":true},"connections":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v1BookConnection"},"description":"Book connections required by this automation for execution.\nMaps connection names to their metadata.\nThese connections are resolved and made available during automation execution."},"update_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last updated.\nUpdated whenever the automation metadata, code, or dependencies change.","readOnly":true},"update_user_id":{"type":"string","description":"The ID of the user who last updated this automation.","readOnly":true},"delete_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was deleted.","readOnly":true},"purge_time":{"type":"string","format":"date-time","description":"Timestamp when the automation will be purged.","readOnly":true},"input_specs":{"type":"array","items":{"$ref":"#/components/schemas/v1AutomationInputSpec"},"description":"List of input specifications that define the parameters this automation accepts.\nThese specifications describe the expected inputs when the automation is executed."},"description":{"type":"string","description":"Provides additional context and documentation about the automation's purpose and behavior."},"latest_published_version":{"type":"string","title":"Semantic version of the latest published version of the automation (format: major.minor).\nIt will be null in case of no published version.\nExamples: \"0.1\", \"1.0\", \"2.0\"","readOnly":true},"author_id":{"type":"string","description":"The ID of the user who created this automation.","readOnly":true},"code_mapping":{"$ref":"#/components/schemas/v1CodeMapping"},"restore_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was restored from a previous version.\nOnly populated if the automation has been restored.","readOnly":true},"restore_version":{"type":"string","description":"The version string this automation was restored from (e.g., \"1.0\", \"2.1\").\nOnly populated if the automation has been restored.","readOnly":true},"restore_user_id":{"type":"string","description":"The ID of the user who restored this automation.\nOnly populated if the automation has been restored.","readOnly":true},"publish_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last published.\nOnly populated if the automation has been published.","readOnly":true},"publish_user_id":{"type":"string","description":"The ID of the user who last published this automation.\nOnly populated if the automation has been published.","readOnly":true},"activation_state":{"$ref":"#/components/schemas/v1AutomationActivationState"},"default_inputs":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/commonV1Value"},"description":"Default input values for this automation.\nKeys are input parameter names (matching AutomationInputSpec.name),\nvalues are the default values to use when inputs are not explicitly provided.\nThese are used to pre-populate inputs for manual runs and fill missing inputs\nfor trigger-based invocations.","readOnly":true},"marked_outputs":{"type":"array","items":{"type":"string"},"description":"List of output keys that have been marked by the user.\nThese keys identify specific outputs from the automation execution."}},"description":"Automation represents a unit of executable code with associated metadata and dependencies.\nAutomations can be in DRAFT or PUBLISHED state, where drafts can be modified and\npublished automations are immutable and executable.\nAutomation IDs are unique nano ID strings (21 characters, URL-safe: A-Za-z0-9_-).","required":["display_name"]},"v1BookConnection":{"type":"object","properties":{"connection_id":{"type":"string","description":"Unique identifier for this connection resource."},"endpoint":{"type":"string","description":"Endpoint for the connection."}},"description":"BookConnection is a resource representing a connection to a book instance.\nA connection has a unique identifier and an endpoint."},"v1AutomationInputSpec":{"type":"object","properties":{"name":{"type":"string","description":"The name of the input parameter."},"type":{"$ref":"#/components/schemas/v1ValueType"}},"description":"AutomationInputSpec defines the specification for an input parameter of an automation.","required":["name"]},"v1ValueType":{"type":"object","properties":{"scalar_type":{"$ref":"#/components/schemas/v1ValueScalarType"},"optional_type":{"$ref":"#/components/schemas/v1ValueOptionalType"},"list_type":{"$ref":"#/components/schemas/v1ValueListType"},"dictionary_type":{"$ref":"#/components/schemas/v1ValueDictionaryType"},"table_type":{"$ref":"#/components/schemas/v1ValueTableType"},"opaque_type":{"$ref":"#/components/schemas/v1ValueOpaqueType"},"any_type":{"$ref":"#/components/schemas/v1ValueAnyType"},"union_type":{"$ref":"#/components/schemas/v1ValueUnionType"},"sensitive_type":{"$ref":"#/components/schemas/v1ValueSensitiveType"},"enum_type":{"$ref":"#/components/schemas/v1ValueEnumType"},"generic_dictionary_type":{"$ref":"#/components/schemas/v1ValueGenericDictionaryType"}},"title":"Represents a complete value type definition using a discriminated union"},"v1ValueScalarType":{"type":"string","enum":["VALUE_SCALAR_TYPE_UNSPECIFIED","VALUE_SCALAR_TYPE_TEXT","VALUE_SCALAR_TYPE_NUMBER","VALUE_SCALAR_TYPE_BOOLEAN","VALUE_SCALAR_TYPE_DATETIME","VALUE_SCALAR_TYPE_DATE","VALUE_SCALAR_TYPE_TIME","VALUE_SCALAR_TYPE_FILE"],"default":"VALUE_SCALAR_TYPE_UNSPECIFIED","description":"- VALUE_SCALAR_TYPE_UNSPECIFIED: Unspecified value type\n - VALUE_SCALAR_TYPE_TEXT: A text value type\n - VALUE_SCALAR_TYPE_NUMBER: A number value type\n - VALUE_SCALAR_TYPE_BOOLEAN: A boolean value type\n - VALUE_SCALAR_TYPE_DATETIME: A datetime value type\n - VALUE_SCALAR_TYPE_DATE: A date value type\n - VALUE_SCALAR_TYPE_TIME: A time value type\n - VALUE_SCALAR_TYPE_FILE: A file value type","title":"Supported Value Scalar Types"},"v1ValueOptionalType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that can be optional (nullable)"},"v1ValueListType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a list/array value type containing elements of a specific type"},"v1ValueDictionaryType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this dictionary represents"},"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueDictionaryTypeField"},"title":"The named fields contained in this dictionary"},"description":{"type":"string","title":"Optional human-readable description of this dictionary type"}},"title":"Represents a dictionary/object value type with named fields"},"v1ValueDictionaryTypeField":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this field"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this field"}},"title":"Represents a single field within a dictionary value type"},"v1ValueTableType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this table represents"},"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueTableTypeColumn"},"title":"The columns that make up this table"},"description":{"type":"string","title":"Optional human-readable description of this table type"}},"title":"Represents a table value type with structured columns"},"v1ValueTableTypeColumn":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this column"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this column"}},"title":"Represents a single column within a table value type"},"v1ValueOpaqueType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this opaque type represents"},"description":{"type":"string","title":"Optional human-readable description of this opaque type"}},"title":"Represents an opaque value type with semantic meaning but unknown internal structure"},"v1ValueAnyType":{"type":"object","title":"Represents a value type that can hold any kind of value"},"v1ValueUnionType":{"type":"object","properties":{"inners":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueType"},"title":"The possible value types in this union"}},"title":"Represents a union value type that can be one of several possible types"},"v1ValueSensitiveType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that contains sensitive information"},"v1ValueEnumType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this enum represents"},"members":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueEnumTypeMember"},"title":"The available options/members of this enum"},"description":{"type":"string","title":"Optional human-readable description of this enum type"}},"title":"Represents an enumeration value type with predefined options"},"v1ValueEnumTypeMember":{"type":"object","properties":{"name":{"type":"string","title":"The programmatic name of this enum member"},"description":{"type":"string","title":"Optional human-readable description of this enum member"}},"title":"Represents a single member/option within an enum value type"},"v1ValueGenericDictionaryType":{"type":"object","properties":{"key_type":{"$ref":"#/components/schemas/v1ValueType"},"value_type":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represent a generic dictionary that can hold any entry of a particular key and value type"},"v1CodeMapping":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1CodeMappingEntry"},"description":"List of mapping entries that associate SPy code regions with English code regions.\nEach entry defines a paired relationship between a span in the SPy code and\na span in the English code representation."}},"description":"CodeMapping represents a bidirectional mapping between SPy (Subset-of-Python) code\nand English code locations within an automation. This mapping enables navigation between\nthe two representations, facilitating debugging, traceability, and synchronized editing.\nEach entry in the mapping associates a region in the SPy code with its corresponding\nregion in the English code. The mapping relationship is many-to-many and entries may\noverlap.","required":["entries"]},"v1CodeMappingEntry":{"type":"object","properties":{"spy_location":{"$ref":"#/components/schemas/commonV1Location"},"english_location":{"$ref":"#/components/schemas/commonV1Location"}},"description":"CodeMappingEntry represents a single mapping between a region in SPy code and\nits corresponding region in English code. This bidirectional association allows\nnavigation from SPy to English and vice versa, enabling synchronized views and\ndebugging across both representations of the automation logic.","required":["spy_location","english_location"]},"commonV1Location":{"type":"object","properties":{"start_byte":{"type":"string","format":"int64","title":"Starting Byte of the span, It will be zero-based"},"end_byte":{"type":"string","format":"int64","title":"Ending Byte(exclusive) of the span, It will be zero-based"}},"description":"Location represents a generic span within some underlying content.\nIt specifies the starting byte offset and the ending byte offset (exclusive) of the span.\nThis can be used for pointing to regions in files, buffers, logs, messages,\nor any other byte-addressable resource."},"v1AutomationActivationState":{"type":"string","enum":["AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","AUTOMATION_ACTIVATION_STATE_ACTIVE","AUTOMATION_ACTIVATION_STATE_DEACTIVATED"],"default":"AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","description":"Activation state of a published automation.\nControls whether the automation can execute published runs.\n\n - AUTOMATION_ACTIVATION_STATE_UNSPECIFIED: Unspecified state. Used when automation has no published version.\nActivation state is only meaningful after publishing.\n - AUTOMATION_ACTIVATION_STATE_ACTIVE: Automation is active and can execute published runs.\n - AUTOMATION_ACTIVATION_STATE_DEACTIVATED: Automation is deactivated and cannot execute published runs.\nEvents will be logged but not executed."},"commonV1Value":{"type":"object","properties":{"null_value":{"type":"string","title":"Represents the absence of a value (None/null/undefined)"},"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"},"duration":{"type":"string","title":"Signed duration representing a span of time"},"list":{"$ref":"#/components/schemas/v1List"},"dictionary":{"$ref":"#/components/schemas/v1Dictionary"},"file":{"$ref":"#/components/schemas/v1FileValue"},"table":{"$ref":"#/components/schemas/v1TableValue"},"set":{"$ref":"#/components/schemas/v1Set"}},"description":"Represents a runtime value that can be produced by the Jarvis interpreter.\n\nThis message provides a type-safe way to serialize and transmit values between\nthe Jarvis interpreter and other services via gRPC. It supports all the basic\ndata types that can be represented in the Jarvis language runtime.\n\nThe oneof structure ensures that exactly one value type is set at a time,\nproviding both type safety and efficient serialization."},"v1Number":{"type":"object","properties":{"lo":{"type":"integer","format":"int64","description":"Low 32 bits of the 96-bit mantissa."},"mid":{"type":"integer","format":"int64","description":"Middle 32 bits of the 96-bit mantissa."},"hi":{"type":"integer","format":"int64","description":"High 32 bits of the 96-bit mantissa."},"flags":{"type":"integer","format":"int64","description":"Flags word:\n - Bits 16–23: scale (0–28)\n - Bit 31: sign (0 = positive, 1 = negative)\n - Other bits must be zero."}},"description":"A fixed-precision decimal number with up to 28 fractional digits.\n\nThis message represents decimal numbers with exact precision, avoiding\nfloating-point rounding errors. It's particularly useful for financial\ncalculations, measurements, and any scenario where exact decimal\nrepresentation is required.\n\nThe value is calculated as: m / 10^e, where:\n - m is an unsigned 96-bit integer composed of (lo, mid, hi)\n - e is the scale (0–28) stored in flags bits 16–23\n - sign is encoded in flags bit 31 (0 = positive, 1 = negative)\n\nExamples:\n - 123.45 would have m=12345, e=2\n - -0.001 would have m=1, e=3, with sign bit set\n"},"typeDate":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year."},"month":{"type":"integer","format":"int32","description":"Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day."},"day":{"type":"integer","format":"int32","description":"Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant."}},"description":"* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.","title":"Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:"},"typeTimeOfDay":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","description":"Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time."},"minutes":{"type":"integer","format":"int32","description":"Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."}},"description":"Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`."},"typeDateTime":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a\ndatetime without a year."},"month":{"type":"integer","format":"int32","description":"Required. Month of year. Must be from 1 to 12."},"day":{"type":"integer","format":"int32","description":"Required. Day of month. Must be from 1 to 31 and valid for the year and\nmonth."},"hours":{"type":"integer","format":"int32","description":"Required. Hours of day in 24 hour format. Should be from 0 to 23. An API\nmay choose to allow the value \"24:00:00\" for scenarios like business\nclosing time."},"minutes":{"type":"integer","format":"int32","description":"Required. Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Required. Seconds of minutes of the time. Must normally be from 0 to 59. An\nAPI may allow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Required. Fractions of seconds in nanoseconds. Must be from 0 to\n999,999,999."},"utc_offset":{"type":"string","description":"UTC offset. Must be whole seconds, between -18 hours and +18 hours.\nFor example, a UTC offset of -4:00 would be represented as\n{ seconds: -14400 }."},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"}},"description":"Represents civil time (or occasionally physical time).\n\nThis type can represent a civil time in one of a few possible ways:\n\n * When utc_offset is set and time_zone is unset: a civil time on a calendar\n   day with a particular offset from UTC.\n * When time_zone is set and utc_offset is unset: a civil time on a calendar\n   day in a particular time zone.\n * When neither time_zone nor utc_offset is set: a civil time on a calendar\n   day in local time.\n\nThe date is relative to the Proleptic Gregorian Calendar.\n\nIf year is 0, the DateTime is considered not to have a specific year. month\nand day must have valid, non-zero values.\n\nThis type may also be used to represent a physical time if all the date and\ntime fields are set and either case of the `time_offset` oneof is set.\nConsider using `Timestamp` message for physical time instead. If your use\ncase also would like to store the user's timezone, that can be done in\nanother field.\n\nThis type is more flexible than some applications may want. Make sure to\ndocument and validate your application's limitations."},"typeTimeZone":{"type":"object","properties":{"id":{"type":"string","description":"IANA Time Zone Database time zone, e.g. \"America/New_York\"."},"version":{"type":"string","description":"Optional. IANA Time Zone Database version number, e.g. \"2019a\"."}},"description":"Represents a time zone from the\n[IANA Time Zone Database](https://www.iana.org/time-zones)."},"v1List":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/commonV1Value"},"title":"The ordered sequence of values in this list"}},"description":"Represents an ordered collection of values (similar to arrays or lists).\n\nThis message can contain any number of Value elements in a specific order.\nLists are mutable and can grow or shrink during runtime. Elements can be\naccessed by their zero-based index position.\n\nExamples:\n - [1, 2, 3] - list of numbers\n - [\"hello\", \"world\"] - list of strings\n - [true, 42, \"mixed\"] - list with mixed types\n - [[1, 2], [3, 4]] - nested lists"},"v1Dictionary":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryEntry"},"title":"The key-value pairs stored in this dictionary"}},"description":"Represents a key-value mapping (similar to hash maps or dictionaries).\n\nThis message stores associations between keys and values, where keys must be\nhashable types (null, bool, Number, string, Date, TimeOfDay, DateTime, TimeZone). Keys are\nunique within a dictionary - duplicate keys will overwrite previous values.\n\nThe dictionary maintains insertion order for consistent iteration behavior.\n\nExamples:\n - {\"name\": \"John\", \"age\": 30} - string keys with mixed values\n - {1: \"one\", 2: \"two\"} - number keys with string values\n - {\"nested\": {\"inner\": \"value\"}} - nested dictionaries"},"v1DictionaryEntry":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/v1HashableValue"},"value":{"$ref":"#/components/schemas/commonV1Value"}},"description":"Represents a single key-value pair within a Dictionary.\n\nBoth key and value can be any Value type, though keys should be\nhashable types for proper dictionary behavior. Non-hashable keys\n(like lists or dictionaries) may cause runtime errors."},"v1HashableValue":{"type":"object","properties":{"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"duration":{"type":"string","title":"Signed duration representing a span of time"}},"description":"Represents a hashable value that can be used as a dictionary key.\n\nThis message contains only the hashable types from the Value message,\ncorresponding to Python's hashable types. These types can be safely\nused as keys in maps and dictionaries.\n\nHashable types include: bool, Number, string, Date, TimeOfDay, DateTime\nand Duration."},"v1FileValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1File"}},"title":"A file value represents a file that can be either inline or remote"},"v1File":{"type":"object","properties":{"file_name":{"type":"string","title":"The name of the file"},"content":{"type":"string","format":"byte","title":"Content of the file as a byte stream"}}},"v1TableValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1Table"}},"title":"A table that is represented remote as an URL to a file that is Feather-formatted\nor inline via the Table message"},"v1Table":{"type":"object","properties":{"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1Column"}}},"description":"A table is a column-oriented structure. All the values inside each column must\nbe of equal length."},"v1Column":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"}},"name":{"type":"string"}}},"bdkV1Value":{"type":"object","properties":{"null_value":{"type":"string"},"conceptual_value":{"$ref":"#/components/schemas/v1NounPhrase"},"text_value":{"type":"string"},"number_value":{"type":"number","format":"double"},"boolean_value":{"type":"boolean"},"datetime_value":{"type":"string","format":"date-time"},"date_value":{"$ref":"#/components/schemas/v1Date"},"time_value":{"$ref":"#/components/schemas/v1Time"},"file_value":{"$ref":"#/components/schemas/v1FileValue"},"dictionary_value":{"$ref":"#/components/schemas/v1DictionaryValue"},"list_value":{"$ref":"#/components/schemas/bdkV1ListValue"},"opaque_value":{"$ref":"#/components/schemas/v1OpaqueValue"},"table_value":{"$ref":"#/components/schemas/v1TableValue"},"sensitive_value":{"$ref":"#/components/schemas/v1SensitiveValue"}},"title":"A union of all possible values"},"v1NounPhrase":{"type":"object","properties":{"modifiers":{"type":"array","items":{"type":"string"},"title":"Optional adjectives attached to the noun"},"head":{"type":"string","title":"Noun of the phrase"}}},"v1Date":{"type":"object","properties":{"year":{"type":"integer","format":"int32","title":"Year of the date"},"month":{"type":"integer","format":"int32","title":"Month of a year"},"day":{"type":"integer","format":"int32","title":"Day of a month"}}},"v1Time":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","title":"Hours of day"},"minutes":{"type":"integer","format":"int32","title":"Minutes of hour of day"},"seconds":{"type":"integer","format":"int32","title":"Seconds of minutes of the time"},"nanos":{"type":"integer","format":"int32","title":"Fractions of seconds in nanoseconds"}}},"v1DictionaryValue":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryValueField"},"title":"All the fields alongside their values in the dictionary"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the dictionary"}},"title":"Value to be used when the type is dictionary"},"v1DictionaryValueField":{"type":"object","properties":{"key":{"type":"string"},"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"Each key-value pair inside a dictionary"},"bdkV1ListValue":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"},"title":"All the values inside the list"}},"title":"A collection of values"},"v1OpaqueValue":{"type":"object","properties":{"content":{"type":"string","format":"byte","title":"Content of the opaque value"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the opaque"}}},"v1SensitiveValue":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"A sensitive value is any value marked as sensitive (to prevent exposure)"},"v1Set":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/v1HashableValue"},"title":"The unique elements stored in this set\nAll elements must be hashable types"}},"description":"Represents an unordered collection of unique values.\n\nThis message stores a collection of unique elements, where duplicate values\nare automatically removed. Only hashable types can be stored in sets.\nSets are useful for membership testing, removing duplicates, and mathematical\nset operations like union, intersection, and difference.\n\nThe set does not maintain insertion order - elements may appear in any order\nduring iteration.\n\nExamples:\n - {1, 2, 3} - set of numbers\n - {\"apple\", \"banana\", \"cherry\"} - set of strings\n - {true, false} - set of booleans\n - {1, \"hello\", true} - set with mixed hashable types"},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"RemoveAutomationConnectionsBody":{"type":"object","properties":{"removals":{"type":"array","items":{"$ref":"#/components/schemas/v1ConnectionRemoval"},"description":"List of connections to remove. All removals are performed atomically:\neither all succeed or all fail. The automation version is incremented once\nfor all removals.\n\nEach connection (identified by connection_id and connection_alias) must be unique\nwithin the list. If the same connection appears multiple times, the request will\nfail with INVALID_ARGUMENT.\n\nFor each connection, the corresponding entry in automation.connections will be removed\nand code references will be replaced with placeholders (kognitos.connection_name.{book})."}},"description":"RemoveAutomationConnectionsRequest specifies which connections to remove from a draft automation.","required":["removals"]},"v1ConnectionRemoval":{"type":"object","properties":{"connection_id":{"type":"string","description":"The connection ID to remove.\nThis connection ID must exist in the automation."},"connection_alias":{"type":"string","description":"The alias of the connection to remove.\nThis alias must match the connection being removed."}},"description":"ConnectionRemoval specifies a connection to remove from an automation.","required":["connection_id","connection_alias"]}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}:removeConnections":{"post":{"summary":"Remove Automation Connections","description":"Multiple connections can be removed in a single atomic operation. All removals succeed\ntogether or all fail together. The automation version is incremented once for all removals.\n\nThis operation only works on draft automations. To remove connections in a published\nautomation, first use ForkPublishedAutomation to create a draft, then call this method.\n\nPer AIP-136, this is a custom method using the :removeConnections suffix.","operationId":"RemoveAutomationConnections","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1RemoveAutomationConnectionsResponse"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveAutomationConnectionsBody"}}},"required":true},"tags":["Automations"]}}}}
```

## Add Automation Connections

> Multiple connections can be added in a single atomic operation. All additions succeed\
> together or all fail together. The automation version is incremented once for all additions.\
> \
> This operation only works on draft automations. To add connections to a published\
> automation, first use ForkPublishedAutomation to create a draft, then call this method.\
> \
> Per AIP-136, this is a custom method using the :addConnections suffix.

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1AddAutomationConnectionsResponse":{"type":"object","properties":{"automation":{"$ref":"#/components/schemas/v1Automation"}},"description":"AddAutomationConnectionsResponse returns the updated automation."},"v1Automation":{"type":"object","properties":{"name":{"type":"string","title":"The automation name (e.g. 'automations/{automation}')"},"display_name":{"type":"string","description":"Human-readable name of the automation for identification and display.\nMust be unique within the user's namespace."},"english_code":{"type":"string","description":"User-facing English description code that explains what the automation does.\nThis is a human-readable representation of the automation's purpose and logic."},"code":{"type":"string","description":"SPy (Subset-of Python) executable code that defines the automation logic.\nThis code is executed when the automation is invoked with inputs."},"artifacts":{"type":"object","additionalProperties":{"type":"string","format":"byte"},"description":"Additional artifacts associated with the automation (e.g., data files, configurations).\nKeys are artifact names, values are the binary content of the artifacts.\nThese artifacts are available to the automation during execution."},"create_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was originally created.\nThis value never changes after creation.","readOnly":true},"version":{"type":"string","title":"Semantic version of this specific version of the automation (format: major.minor).\nIncremented each time the automation is updated or published.\nExamples: \"0.1\", \"1.0\", \"1.1\", \"2.0\"","readOnly":true},"connections":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v1BookConnection"},"description":"Book connections required by this automation for execution.\nMaps connection names to their metadata.\nThese connections are resolved and made available during automation execution."},"update_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last updated.\nUpdated whenever the automation metadata, code, or dependencies change.","readOnly":true},"update_user_id":{"type":"string","description":"The ID of the user who last updated this automation.","readOnly":true},"delete_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was deleted.","readOnly":true},"purge_time":{"type":"string","format":"date-time","description":"Timestamp when the automation will be purged.","readOnly":true},"input_specs":{"type":"array","items":{"$ref":"#/components/schemas/v1AutomationInputSpec"},"description":"List of input specifications that define the parameters this automation accepts.\nThese specifications describe the expected inputs when the automation is executed."},"description":{"type":"string","description":"Provides additional context and documentation about the automation's purpose and behavior."},"latest_published_version":{"type":"string","title":"Semantic version of the latest published version of the automation (format: major.minor).\nIt will be null in case of no published version.\nExamples: \"0.1\", \"1.0\", \"2.0\"","readOnly":true},"author_id":{"type":"string","description":"The ID of the user who created this automation.","readOnly":true},"code_mapping":{"$ref":"#/components/schemas/v1CodeMapping"},"restore_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was restored from a previous version.\nOnly populated if the automation has been restored.","readOnly":true},"restore_version":{"type":"string","description":"The version string this automation was restored from (e.g., \"1.0\", \"2.1\").\nOnly populated if the automation has been restored.","readOnly":true},"restore_user_id":{"type":"string","description":"The ID of the user who restored this automation.\nOnly populated if the automation has been restored.","readOnly":true},"publish_time":{"type":"string","format":"date-time","description":"Timestamp when the automation was last published.\nOnly populated if the automation has been published.","readOnly":true},"publish_user_id":{"type":"string","description":"The ID of the user who last published this automation.\nOnly populated if the automation has been published.","readOnly":true},"activation_state":{"$ref":"#/components/schemas/v1AutomationActivationState"},"default_inputs":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/commonV1Value"},"description":"Default input values for this automation.\nKeys are input parameter names (matching AutomationInputSpec.name),\nvalues are the default values to use when inputs are not explicitly provided.\nThese are used to pre-populate inputs for manual runs and fill missing inputs\nfor trigger-based invocations.","readOnly":true},"marked_outputs":{"type":"array","items":{"type":"string"},"description":"List of output keys that have been marked by the user.\nThese keys identify specific outputs from the automation execution."}},"description":"Automation represents a unit of executable code with associated metadata and dependencies.\nAutomations can be in DRAFT or PUBLISHED state, where drafts can be modified and\npublished automations are immutable and executable.\nAutomation IDs are unique nano ID strings (21 characters, URL-safe: A-Za-z0-9_-).","required":["display_name"]},"v1BookConnection":{"type":"object","properties":{"connection_id":{"type":"string","description":"Unique identifier for this connection resource."},"endpoint":{"type":"string","description":"Endpoint for the connection."}},"description":"BookConnection is a resource representing a connection to a book instance.\nA connection has a unique identifier and an endpoint."},"v1AutomationInputSpec":{"type":"object","properties":{"name":{"type":"string","description":"The name of the input parameter."},"type":{"$ref":"#/components/schemas/v1ValueType"}},"description":"AutomationInputSpec defines the specification for an input parameter of an automation.","required":["name"]},"v1ValueType":{"type":"object","properties":{"scalar_type":{"$ref":"#/components/schemas/v1ValueScalarType"},"optional_type":{"$ref":"#/components/schemas/v1ValueOptionalType"},"list_type":{"$ref":"#/components/schemas/v1ValueListType"},"dictionary_type":{"$ref":"#/components/schemas/v1ValueDictionaryType"},"table_type":{"$ref":"#/components/schemas/v1ValueTableType"},"opaque_type":{"$ref":"#/components/schemas/v1ValueOpaqueType"},"any_type":{"$ref":"#/components/schemas/v1ValueAnyType"},"union_type":{"$ref":"#/components/schemas/v1ValueUnionType"},"sensitive_type":{"$ref":"#/components/schemas/v1ValueSensitiveType"},"enum_type":{"$ref":"#/components/schemas/v1ValueEnumType"},"generic_dictionary_type":{"$ref":"#/components/schemas/v1ValueGenericDictionaryType"}},"title":"Represents a complete value type definition using a discriminated union"},"v1ValueScalarType":{"type":"string","enum":["VALUE_SCALAR_TYPE_UNSPECIFIED","VALUE_SCALAR_TYPE_TEXT","VALUE_SCALAR_TYPE_NUMBER","VALUE_SCALAR_TYPE_BOOLEAN","VALUE_SCALAR_TYPE_DATETIME","VALUE_SCALAR_TYPE_DATE","VALUE_SCALAR_TYPE_TIME","VALUE_SCALAR_TYPE_FILE"],"default":"VALUE_SCALAR_TYPE_UNSPECIFIED","description":"- VALUE_SCALAR_TYPE_UNSPECIFIED: Unspecified value type\n - VALUE_SCALAR_TYPE_TEXT: A text value type\n - VALUE_SCALAR_TYPE_NUMBER: A number value type\n - VALUE_SCALAR_TYPE_BOOLEAN: A boolean value type\n - VALUE_SCALAR_TYPE_DATETIME: A datetime value type\n - VALUE_SCALAR_TYPE_DATE: A date value type\n - VALUE_SCALAR_TYPE_TIME: A time value type\n - VALUE_SCALAR_TYPE_FILE: A file value type","title":"Supported Value Scalar Types"},"v1ValueOptionalType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that can be optional (nullable)"},"v1ValueListType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a list/array value type containing elements of a specific type"},"v1ValueDictionaryType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this dictionary represents"},"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueDictionaryTypeField"},"title":"The named fields contained in this dictionary"},"description":{"type":"string","title":"Optional human-readable description of this dictionary type"}},"title":"Represents a dictionary/object value type with named fields"},"v1ValueDictionaryTypeField":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this field"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this field"}},"title":"Represents a single field within a dictionary value type"},"v1ValueTableType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this table represents"},"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueTableTypeColumn"},"title":"The columns that make up this table"},"description":{"type":"string","title":"Optional human-readable description of this table type"}},"title":"Represents a table value type with structured columns"},"v1ValueTableTypeColumn":{"type":"object","properties":{"key":{"type":"string","title":"The name/key of this column"},"value":{"$ref":"#/components/schemas/v1ValueType"},"description":{"type":"string","title":"Optional human-readable description of this column"}},"title":"Represents a single column within a table value type"},"v1ValueOpaqueType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this opaque type represents"},"description":{"type":"string","title":"Optional human-readable description of this opaque type"}},"title":"Represents an opaque value type with semantic meaning but unknown internal structure"},"v1ValueAnyType":{"type":"object","title":"Represents a value type that can hold any kind of value"},"v1ValueUnionType":{"type":"object","properties":{"inners":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueType"},"title":"The possible value types in this union"}},"title":"Represents a union value type that can be one of several possible types"},"v1ValueSensitiveType":{"type":"object","properties":{"inner":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represents a value type that contains sensitive information"},"v1ValueEnumType":{"type":"object","properties":{"is_a":{"type":"string","title":"Semantic classification of what this enum represents"},"members":{"type":"array","items":{"$ref":"#/components/schemas/v1ValueEnumTypeMember"},"title":"The available options/members of this enum"},"description":{"type":"string","title":"Optional human-readable description of this enum type"}},"title":"Represents an enumeration value type with predefined options"},"v1ValueEnumTypeMember":{"type":"object","properties":{"name":{"type":"string","title":"The programmatic name of this enum member"},"description":{"type":"string","title":"Optional human-readable description of this enum member"}},"title":"Represents a single member/option within an enum value type"},"v1ValueGenericDictionaryType":{"type":"object","properties":{"key_type":{"$ref":"#/components/schemas/v1ValueType"},"value_type":{"$ref":"#/components/schemas/v1ValueType"}},"title":"Represent a generic dictionary that can hold any entry of a particular key and value type"},"v1CodeMapping":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1CodeMappingEntry"},"description":"List of mapping entries that associate SPy code regions with English code regions.\nEach entry defines a paired relationship between a span in the SPy code and\na span in the English code representation."}},"description":"CodeMapping represents a bidirectional mapping between SPy (Subset-of-Python) code\nand English code locations within an automation. This mapping enables navigation between\nthe two representations, facilitating debugging, traceability, and synchronized editing.\nEach entry in the mapping associates a region in the SPy code with its corresponding\nregion in the English code. The mapping relationship is many-to-many and entries may\noverlap.","required":["entries"]},"v1CodeMappingEntry":{"type":"object","properties":{"spy_location":{"$ref":"#/components/schemas/commonV1Location"},"english_location":{"$ref":"#/components/schemas/commonV1Location"}},"description":"CodeMappingEntry represents a single mapping between a region in SPy code and\nits corresponding region in English code. This bidirectional association allows\nnavigation from SPy to English and vice versa, enabling synchronized views and\ndebugging across both representations of the automation logic.","required":["spy_location","english_location"]},"commonV1Location":{"type":"object","properties":{"start_byte":{"type":"string","format":"int64","title":"Starting Byte of the span, It will be zero-based"},"end_byte":{"type":"string","format":"int64","title":"Ending Byte(exclusive) of the span, It will be zero-based"}},"description":"Location represents a generic span within some underlying content.\nIt specifies the starting byte offset and the ending byte offset (exclusive) of the span.\nThis can be used for pointing to regions in files, buffers, logs, messages,\nor any other byte-addressable resource."},"v1AutomationActivationState":{"type":"string","enum":["AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","AUTOMATION_ACTIVATION_STATE_ACTIVE","AUTOMATION_ACTIVATION_STATE_DEACTIVATED"],"default":"AUTOMATION_ACTIVATION_STATE_UNSPECIFIED","description":"Activation state of a published automation.\nControls whether the automation can execute published runs.\n\n - AUTOMATION_ACTIVATION_STATE_UNSPECIFIED: Unspecified state. Used when automation has no published version.\nActivation state is only meaningful after publishing.\n - AUTOMATION_ACTIVATION_STATE_ACTIVE: Automation is active and can execute published runs.\n - AUTOMATION_ACTIVATION_STATE_DEACTIVATED: Automation is deactivated and cannot execute published runs.\nEvents will be logged but not executed."},"commonV1Value":{"type":"object","properties":{"null_value":{"type":"string","title":"Represents the absence of a value (None/null/undefined)"},"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"},"duration":{"type":"string","title":"Signed duration representing a span of time"},"list":{"$ref":"#/components/schemas/v1List"},"dictionary":{"$ref":"#/components/schemas/v1Dictionary"},"file":{"$ref":"#/components/schemas/v1FileValue"},"table":{"$ref":"#/components/schemas/v1TableValue"},"set":{"$ref":"#/components/schemas/v1Set"}},"description":"Represents a runtime value that can be produced by the Jarvis interpreter.\n\nThis message provides a type-safe way to serialize and transmit values between\nthe Jarvis interpreter and other services via gRPC. It supports all the basic\ndata types that can be represented in the Jarvis language runtime.\n\nThe oneof structure ensures that exactly one value type is set at a time,\nproviding both type safety and efficient serialization."},"v1Number":{"type":"object","properties":{"lo":{"type":"integer","format":"int64","description":"Low 32 bits of the 96-bit mantissa."},"mid":{"type":"integer","format":"int64","description":"Middle 32 bits of the 96-bit mantissa."},"hi":{"type":"integer","format":"int64","description":"High 32 bits of the 96-bit mantissa."},"flags":{"type":"integer","format":"int64","description":"Flags word:\n - Bits 16–23: scale (0–28)\n - Bit 31: sign (0 = positive, 1 = negative)\n - Other bits must be zero."}},"description":"A fixed-precision decimal number with up to 28 fractional digits.\n\nThis message represents decimal numbers with exact precision, avoiding\nfloating-point rounding errors. It's particularly useful for financial\ncalculations, measurements, and any scenario where exact decimal\nrepresentation is required.\n\nThe value is calculated as: m / 10^e, where:\n - m is an unsigned 96-bit integer composed of (lo, mid, hi)\n - e is the scale (0–28) stored in flags bits 16–23\n - sign is encoded in flags bit 31 (0 = positive, 1 = negative)\n\nExamples:\n - 123.45 would have m=12345, e=2\n - -0.001 would have m=1, e=3, with sign bit set\n"},"typeDate":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year."},"month":{"type":"integer","format":"int32","description":"Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day."},"day":{"type":"integer","format":"int32","description":"Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant."}},"description":"* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.","title":"Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:"},"typeTimeOfDay":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","description":"Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time."},"minutes":{"type":"integer","format":"int32","description":"Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."}},"description":"Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`."},"typeDateTime":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a\ndatetime without a year."},"month":{"type":"integer","format":"int32","description":"Required. Month of year. Must be from 1 to 12."},"day":{"type":"integer","format":"int32","description":"Required. Day of month. Must be from 1 to 31 and valid for the year and\nmonth."},"hours":{"type":"integer","format":"int32","description":"Required. Hours of day in 24 hour format. Should be from 0 to 23. An API\nmay choose to allow the value \"24:00:00\" for scenarios like business\nclosing time."},"minutes":{"type":"integer","format":"int32","description":"Required. Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Required. Seconds of minutes of the time. Must normally be from 0 to 59. An\nAPI may allow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Required. Fractions of seconds in nanoseconds. Must be from 0 to\n999,999,999."},"utc_offset":{"type":"string","description":"UTC offset. Must be whole seconds, between -18 hours and +18 hours.\nFor example, a UTC offset of -4:00 would be represented as\n{ seconds: -14400 }."},"time_zone":{"$ref":"#/components/schemas/typeTimeZone"}},"description":"Represents civil time (or occasionally physical time).\n\nThis type can represent a civil time in one of a few possible ways:\n\n * When utc_offset is set and time_zone is unset: a civil time on a calendar\n   day with a particular offset from UTC.\n * When time_zone is set and utc_offset is unset: a civil time on a calendar\n   day in a particular time zone.\n * When neither time_zone nor utc_offset is set: a civil time on a calendar\n   day in local time.\n\nThe date is relative to the Proleptic Gregorian Calendar.\n\nIf year is 0, the DateTime is considered not to have a specific year. month\nand day must have valid, non-zero values.\n\nThis type may also be used to represent a physical time if all the date and\ntime fields are set and either case of the `time_offset` oneof is set.\nConsider using `Timestamp` message for physical time instead. If your use\ncase also would like to store the user's timezone, that can be done in\nanother field.\n\nThis type is more flexible than some applications may want. Make sure to\ndocument and validate your application's limitations."},"typeTimeZone":{"type":"object","properties":{"id":{"type":"string","description":"IANA Time Zone Database time zone, e.g. \"America/New_York\"."},"version":{"type":"string","description":"Optional. IANA Time Zone Database version number, e.g. \"2019a\"."}},"description":"Represents a time zone from the\n[IANA Time Zone Database](https://www.iana.org/time-zones)."},"v1List":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/commonV1Value"},"title":"The ordered sequence of values in this list"}},"description":"Represents an ordered collection of values (similar to arrays or lists).\n\nThis message can contain any number of Value elements in a specific order.\nLists are mutable and can grow or shrink during runtime. Elements can be\naccessed by their zero-based index position.\n\nExamples:\n - [1, 2, 3] - list of numbers\n - [\"hello\", \"world\"] - list of strings\n - [true, 42, \"mixed\"] - list with mixed types\n - [[1, 2], [3, 4]] - nested lists"},"v1Dictionary":{"type":"object","properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryEntry"},"title":"The key-value pairs stored in this dictionary"}},"description":"Represents a key-value mapping (similar to hash maps or dictionaries).\n\nThis message stores associations between keys and values, where keys must be\nhashable types (null, bool, Number, string, Date, TimeOfDay, DateTime, TimeZone). Keys are\nunique within a dictionary - duplicate keys will overwrite previous values.\n\nThe dictionary maintains insertion order for consistent iteration behavior.\n\nExamples:\n - {\"name\": \"John\", \"age\": 30} - string keys with mixed values\n - {1: \"one\", 2: \"two\"} - number keys with string values\n - {\"nested\": {\"inner\": \"value\"}} - nested dictionaries"},"v1DictionaryEntry":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/v1HashableValue"},"value":{"$ref":"#/components/schemas/commonV1Value"}},"description":"Represents a single key-value pair within a Dictionary.\n\nBoth key and value can be any Value type, though keys should be\nhashable types for proper dictionary behavior. Non-hashable keys\n(like lists or dictionaries) may cause runtime errors."},"v1HashableValue":{"type":"object","properties":{"bool_value":{"type":"boolean","title":"Boolean true/false value"},"number":{"$ref":"#/components/schemas/v1Number"},"text":{"type":"string","title":"UTF-8 encoded text string"},"date":{"$ref":"#/components/schemas/typeDate"},"timeofday":{"$ref":"#/components/schemas/typeTimeOfDay"},"datetime":{"$ref":"#/components/schemas/typeDateTime"},"duration":{"type":"string","title":"Signed duration representing a span of time"}},"description":"Represents a hashable value that can be used as a dictionary key.\n\nThis message contains only the hashable types from the Value message,\ncorresponding to Python's hashable types. These types can be safely\nused as keys in maps and dictionaries.\n\nHashable types include: bool, Number, string, Date, TimeOfDay, DateTime\nand Duration."},"v1FileValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1File"}},"title":"A file value represents a file that can be either inline or remote"},"v1File":{"type":"object","properties":{"file_name":{"type":"string","title":"The name of the file"},"content":{"type":"string","format":"byte","title":"Content of the file as a byte stream"}}},"v1TableValue":{"type":"object","properties":{"remote":{"type":"string"},"inline":{"$ref":"#/components/schemas/v1Table"}},"title":"A table that is represented remote as an URL to a file that is Feather-formatted\nor inline via the Table message"},"v1Table":{"type":"object","properties":{"columns":{"type":"array","items":{"$ref":"#/components/schemas/v1Column"}}},"description":"A table is a column-oriented structure. All the values inside each column must\nbe of equal length."},"v1Column":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"}},"name":{"type":"string"}}},"bdkV1Value":{"type":"object","properties":{"null_value":{"type":"string"},"conceptual_value":{"$ref":"#/components/schemas/v1NounPhrase"},"text_value":{"type":"string"},"number_value":{"type":"number","format":"double"},"boolean_value":{"type":"boolean"},"datetime_value":{"type":"string","format":"date-time"},"date_value":{"$ref":"#/components/schemas/v1Date"},"time_value":{"$ref":"#/components/schemas/v1Time"},"file_value":{"$ref":"#/components/schemas/v1FileValue"},"dictionary_value":{"$ref":"#/components/schemas/v1DictionaryValue"},"list_value":{"$ref":"#/components/schemas/bdkV1ListValue"},"opaque_value":{"$ref":"#/components/schemas/v1OpaqueValue"},"table_value":{"$ref":"#/components/schemas/v1TableValue"},"sensitive_value":{"$ref":"#/components/schemas/v1SensitiveValue"}},"title":"A union of all possible values"},"v1NounPhrase":{"type":"object","properties":{"modifiers":{"type":"array","items":{"type":"string"},"title":"Optional adjectives attached to the noun"},"head":{"type":"string","title":"Noun of the phrase"}}},"v1Date":{"type":"object","properties":{"year":{"type":"integer","format":"int32","title":"Year of the date"},"month":{"type":"integer","format":"int32","title":"Month of a year"},"day":{"type":"integer","format":"int32","title":"Day of a month"}}},"v1Time":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","title":"Hours of day"},"minutes":{"type":"integer","format":"int32","title":"Minutes of hour of day"},"seconds":{"type":"integer","format":"int32","title":"Seconds of minutes of the time"},"nanos":{"type":"integer","format":"int32","title":"Fractions of seconds in nanoseconds"}}},"v1DictionaryValue":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/v1DictionaryValueField"},"title":"All the fields alongside their values in the dictionary"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the dictionary"}},"title":"Value to be used when the type is dictionary"},"v1DictionaryValueField":{"type":"object","properties":{"key":{"type":"string"},"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"Each key-value pair inside a dictionary"},"bdkV1ListValue":{"type":"object","properties":{"values":{"type":"array","items":{"$ref":"#/components/schemas/bdkV1Value"},"title":"All the values inside the list"}},"title":"A collection of values"},"v1OpaqueValue":{"type":"object","properties":{"content":{"type":"string","format":"byte","title":"Content of the opaque value"},"is_a":{"type":"array","items":{"$ref":"#/components/schemas/v1NounPhrase"},"title":"Is a replationships for the opaque"}}},"v1SensitiveValue":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/bdkV1Value"}},"title":"A sensitive value is any value marked as sensitive (to prevent exposure)"},"v1Set":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/v1HashableValue"},"title":"The unique elements stored in this set\nAll elements must be hashable types"}},"description":"Represents an unordered collection of unique values.\n\nThis message stores a collection of unique elements, where duplicate values\nare automatically removed. Only hashable types can be stored in sets.\nSets are useful for membership testing, removing duplicates, and mathematical\nset operations like union, intersection, and difference.\n\nThe set does not maintain insertion order - elements may appear in any order\nduring iteration.\n\nExamples:\n - {1, 2, 3} - set of numbers\n - {\"apple\", \"banana\", \"cherry\"} - set of strings\n - {true, false} - set of booleans\n - {1, \"hello\", true} - set with mixed hashable types"},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"AddAutomationConnectionsBody":{"type":"object","properties":{"connections":{"type":"array","items":{"$ref":"#/components/schemas/v1CredentialInfo"},"description":"List of connections to add. All additions are performed atomically:\neither all succeed or all fail. The automation version is incremented once\nfor all additions.\n\nEach connection must be unique within the list. If duplicate connections appear,\nthe request will fail with INVALID_ARGUMENT."}},"description":"AddAutomationConnectionsRequest specifies which connections to add to a draft automation.","required":["connections"]},"v1CredentialInfo":{"type":"object","properties":{"book":{"type":"string","description":"The name of the book requiring credentials.\nThis field represents the book name."},"book_version":{"type":"string","description":"The version of the book."},"connection_alias":{"type":"string","description":"The alias of the connection within the automation.\nThis field represents the connection alias."},"connection_id":{"type":"string","description":"The unique identifier of the connection."},"phase_type":{"$ref":"#/components/schemas/v1PhaseType"}},"description":"CredentialInfo describes connection credential information.","required":["book","book_version"]},"v1PhaseType":{"type":"string","enum":["PHASE_TYPE_UNSPECIFIED","PHASE_TYPE_PRE","PHASE_TYPE_MAIN","PHASE_TYPE_POST"],"default":"PHASE_TYPE_UNSPECIFIED","description":"PhaseType defines the type of phase for an automation trigger.\n\n - PHASE_TYPE_UNSPECIFIED: Unspecified phase type.\n - PHASE_TYPE_PRE: Pre-processing phase.\n - PHASE_TYPE_MAIN: Main processing phase.\n - PHASE_TYPE_POST: Post-processing phase."}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}:addConnections":{"post":{"summary":"Add Automation Connections","description":"Multiple connections can be added in a single atomic operation. All additions succeed\ntogether or all fail together. The automation version is incremented once for all additions.\n\nThis operation only works on draft automations. To add connections to a published\nautomation, first use ForkPublishedAutomation to create a draft, then call this method.\n\nPer AIP-136, this is a custom method using the :addConnections suffix.","operationId":"AddAutomationConnections","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1AddAutomationConnectionsResponse"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddAutomationConnectionsBody"}}},"required":true},"tags":["Automations"]}}}}
```

## GET /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations/{automation\_id}/visualization

> Get Automation Visualization

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1AutomationVisualization":{"type":"object","properties":{"name":{"type":"string","title":"The resource name of the visualization.\nFormat: organizations/{org}/workspaces/{ws}/automations/{automation}/visualization"},"graph":{"$ref":"#/components/schemas/v1FlowGraph"},"automation_version":{"type":"string","description":"The semantic version of the automation this visualization represents.\nFormat: \"major.0\" (e.g., \"1.0\", \"2.0\", \"3.0\") - always a published version.\nThis corresponds to the automation's published version at the time of generation.","readOnly":true},"state":{"$ref":"#/components/schemas/v1VisualizationState"},"error_message":{"type":"string","description":"Error message describing why generation failed.\nOnly populated when state is VISUALIZATION_STATE_FAILED.","readOnly":true}},"description":"AutomationVisualization represents a visual representation of an automation's execution flow.\nVisualizations are generated for published automation versions and stored as configurations\nfor rendering in the UI. This is a singleton resource - each automation has exactly one visualization\nrepresenting its latest published version."},"v1FlowGraph":{"type":"object","properties":{"nodes":{"type":"array","items":{"$ref":"#/components/schemas/v1FlowNode"},"description":"List of nodes representing steps in the automation flow."},"edges":{"type":"array","items":{"$ref":"#/components/schemas/v1FlowEdge"},"description":"List of edges representing connections between nodes."}},"description":"FlowGraph represents the execution flow of an automation as a directed graph.\nThe graph consists of nodes (representing steps) and edges (representing transitions)."},"v1FlowNode":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this node within the graph."},"label":{"type":"string","description":"Human-readable label describing this step."},"type":{"$ref":"#/components/schemas/v1FlowNodeType"}},"description":"FlowNode represents a single step or decision point in the automation flow."},"v1FlowNodeType":{"type":"string","enum":["FLOW_NODE_TYPE_UNSPECIFIED","FLOW_NODE_TYPE_START","FLOW_NODE_TYPE_END","FLOW_NODE_TYPE_PROCESS","FLOW_NODE_TYPE_DECISION","FLOW_NODE_TYPE_INPUT","FLOW_NODE_TYPE_OUTPUT"],"default":"FLOW_NODE_TYPE_UNSPECIFIED","description":"FlowNodeType defines the different types of nodes in an automation flow.\n\n - FLOW_NODE_TYPE_UNSPECIFIED: Unspecified node type.\n - FLOW_NODE_TYPE_START: Start node - represents the beginning of the flow.\n - FLOW_NODE_TYPE_END: End node - represents the end of the flow.\n - FLOW_NODE_TYPE_PROCESS: Process node - represents a processing step.\n - FLOW_NODE_TYPE_DECISION: Decision node - represents a branching point (if-else conditions).\n - FLOW_NODE_TYPE_INPUT: Input node - represents an input action.\n - FLOW_NODE_TYPE_OUTPUT: Output node - represents an output action."},"v1FlowEdge":{"type":"object","properties":{"source":{"type":"string","description":"ID of the source node where the edge originates."},"target":{"type":"string","description":"ID of the target node where the edge points."},"condition":{"type":"string","description":"Optional condition label for the edge (e.g., \"Yes\", \"No\" for decision branches)."}},"description":"FlowEdge represents a directed connection between two nodes."},"v1VisualizationState":{"type":"string","enum":["VISUALIZATION_STATE_UNSPECIFIED","VISUALIZATION_STATE_PENDING","VISUALIZATION_STATE_COMPLETED","VISUALIZATION_STATE_FAILED"],"default":"VISUALIZATION_STATE_UNSPECIFIED","description":"VisualizationState indicates the current state of visualization generation.\n\n - VISUALIZATION_STATE_UNSPECIFIED: Unspecified state.\n - VISUALIZATION_STATE_PENDING: Visualization generation is in progress.\n - VISUALIZATION_STATE_COMPLETED: Visualization generation completed successfully.\n - VISUALIZATION_STATE_FAILED: Visualization generation failed."},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}/visualization":{"get":{"summary":"Get Automation Visualization","operationId":"GetAutomationVisualization","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1AutomationVisualization"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}}],"tags":["Automations"]}}}}
```

## GET /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations/{automation\_id}/schedule

> Get Automation Schedule

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1AutomationSchedule":{"type":"object","properties":{"name":{"type":"string","title":"Resource name of the schedule.\nFormat: organizations/{org}/workspaces/{ws}/automations/{automation}/schedule"},"config":{"$ref":"#/components/schemas/v1ScheduleConfig"},"enabled":{"type":"boolean","description":"Whether the schedule is currently enabled.\nDisabled schedules do not trigger automation invocations.","readOnly":true},"summary":{"type":"string","title":"Human-readable summary of the schedule for display in the UI.\nGenerated by the backend based on the schedule configuration.\nExamples: \"Every weekday at 9:00 AM PT\", \"Monthly on the 4th Friday at 2:30 PM\"","readOnly":true},"next_run_times":{"type":"array","items":{"type":"string","format":"date-time"},"description":"List of the next scheduled execution times.\nUseful for preview and verification. Backend generates these.","readOnly":true},"remaining_occurrences":{"type":"integer","format":"int32","description":"Number of remaining occurrences if the schedule has an end condition.\nOnly populated when config.end.end_type is SCHEDULE_END_TYPE_AFTER_OCCURRENCES.","readOnly":true}},"description":"AutomationSchedule represents a schedule for invoking an automation.\nEach automation can have at most one schedule. Kestra is the source of truth.","required":["config"]},"v1ScheduleConfig":{"type":"object","properties":{"start":{"$ref":"#/components/schemas/v1ScheduleStart"},"repeat_interval":{"$ref":"#/components/schemas/v1RepeatInterval"},"weekly_pattern":{"$ref":"#/components/schemas/v1DayOfWeekPattern"},"monthly_pattern":{"$ref":"#/components/schemas/v1DayOfMonthPattern"},"yearly_pattern":{"$ref":"#/components/schemas/v1MonthPattern"},"active_window":{"$ref":"#/components/schemas/v1TimeWindow"},"end":{"$ref":"#/components/schemas/v1ScheduleEnd"}},"description":"ScheduleConfig is the main user-friendly configuration for automation schedules.\nThe backend generates the appropriate scheduling logic from this configuration.","required":["start"]},"v1ScheduleStart":{"type":"object","properties":{"start_date":{"$ref":"#/components/schemas/typeDate"},"time":{"$ref":"#/components/schemas/typeTimeOfDay"},"time_zone":{"type":"string","description":"Timezone for the schedule. Defaults to \"UTC\" if not specified.\nUse IANA timezone identifiers (e.g., \"America/New_York\", \"America/Los_Angeles\", \"Europe/London\")."}},"description":"ScheduleStart defines when the schedule begins."},"typeDate":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year."},"month":{"type":"integer","format":"int32","description":"Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day."},"day":{"type":"integer","format":"int32","description":"Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant."}},"description":"* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.","title":"Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:"},"typeTimeOfDay":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","description":"Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time."},"minutes":{"type":"integer","format":"int32","description":"Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."}},"description":"Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`."},"v1RepeatInterval":{"type":"object","properties":{"unit":{"$ref":"#/components/schemas/v1FrequencyUnit"},"interval":{"type":"integer","format":"int32","description":"The interval value. For example, 2 with FREQUENCY_UNIT_WEEK means \"every 2 weeks\".\nMust be a positive integer. Defaults to 1 if not specified."}},"description":"RepeatInterval defines how often the schedule repeats.","required":["unit"]},"v1FrequencyUnit":{"type":"string","enum":["FREQUENCY_UNIT_UNSPECIFIED","FREQUENCY_UNIT_MINUTE","FREQUENCY_UNIT_HOUR","FREQUENCY_UNIT_DAY","FREQUENCY_UNIT_WEEK","FREQUENCY_UNIT_MONTH","FREQUENCY_UNIT_YEAR"],"default":"FREQUENCY_UNIT_UNSPECIFIED","description":"FrequencyUnit defines the unit for schedule repetition.\n\n - FREQUENCY_UNIT_UNSPECIFIED: Unspecified frequency unit.\n - FREQUENCY_UNIT_MINUTE: Schedule repeats every N minutes.\n - FREQUENCY_UNIT_HOUR: Schedule repeats every N hours.\n - FREQUENCY_UNIT_DAY: Schedule repeats every N days.\n - FREQUENCY_UNIT_WEEK: Schedule repeats every N weeks.\n - FREQUENCY_UNIT_MONTH: Schedule repeats every N months.\n - FREQUENCY_UNIT_YEAR: Schedule repeats every N years."},"v1DayOfWeekPattern":{"type":"object","properties":{"days":{"type":"array","items":{"$ref":"#/components/schemas/v1DayOfWeek"},"description":"Days of the week when the schedule should run.\nAt least one day must be specified."}},"description":"DayOfWeekPattern specifies which days of the week to run.\nUsed for weekly schedules (e.g., \"every Monday\", \"every Mon/Wed/Fri\").","required":["days"]},"v1DayOfWeek":{"type":"string","enum":["DAY_OF_WEEK_UNSPECIFIED","DAY_OF_WEEK_MONDAY","DAY_OF_WEEK_TUESDAY","DAY_OF_WEEK_WEDNESDAY","DAY_OF_WEEK_THURSDAY","DAY_OF_WEEK_FRIDAY","DAY_OF_WEEK_SATURDAY","DAY_OF_WEEK_SUNDAY"],"default":"DAY_OF_WEEK_UNSPECIFIED","description":"DayOfWeek represents days of the week for scheduling.\nValues align with ISO 8601 (Monday = 1, Sunday = 7).\n\n - DAY_OF_WEEK_UNSPECIFIED: Unspecified day.\n - DAY_OF_WEEK_MONDAY: Monday.\n - DAY_OF_WEEK_TUESDAY: Tuesday.\n - DAY_OF_WEEK_WEDNESDAY: Wednesday.\n - DAY_OF_WEEK_THURSDAY: Thursday.\n - DAY_OF_WEEK_FRIDAY: Friday.\n - DAY_OF_WEEK_SATURDAY: Saturday.\n - DAY_OF_WEEK_SUNDAY: Sunday."},"v1DayOfMonthPattern":{"type":"object","properties":{"day_number":{"type":"integer","format":"int32","description":"Run on a specific day of the month (1-31).\nIf the month has fewer days, runs on the last day of that month."},"ordinal_day":{"$ref":"#/components/schemas/v1OrdinalDayOfWeek"}},"description":"DayOfMonthPattern specifies which day(s) of the month to run.\nUsed for monthly schedules."},"v1OrdinalDayOfWeek":{"type":"object","properties":{"ordinal":{"$ref":"#/components/schemas/v1Ordinal"},"day":{"$ref":"#/components/schemas/v1DayOfWeek"}},"description":"OrdinalDayOfWeek represents a pattern like \"first Monday\" or \"last Friday\".\nUsed as a building block for monthly and yearly patterns.","required":["ordinal","day"]},"v1Ordinal":{"type":"string","enum":["ORDINAL_UNSPECIFIED","ORDINAL_FIRST","ORDINAL_SECOND","ORDINAL_THIRD","ORDINAL_FOURTH","ORDINAL_FIFTH","ORDINAL_LAST"],"default":"ORDINAL_UNSPECIFIED","description":"Ordinal represents the position within a period (e.g., \"first Monday of month\").\n\n - ORDINAL_UNSPECIFIED: Unspecified ordinal.\n - ORDINAL_FIRST: First occurrence (e.g., first Monday).\n - ORDINAL_SECOND: Second occurrence.\n - ORDINAL_THIRD: Third occurrence.\n - ORDINAL_FOURTH: Fourth occurrence.\n - ORDINAL_FIFTH: Fifth occurrence (not all months have a fifth occurrence of each day).\n - ORDINAL_LAST: Last occurrence (e.g., last Friday of month)."},"v1MonthPattern":{"type":"object","properties":{"month":{"$ref":"#/components/schemas/v1Month"},"day_pattern":{"$ref":"#/components/schemas/v1DayOfMonthPattern"}},"description":"MonthPattern specifies which month and day to run.\nUsed for yearly schedules (e.g., \"July 30\", \"last Friday of December\").","required":["month","day_pattern"]},"v1Month":{"type":"string","enum":["MONTH_UNSPECIFIED","MONTH_JANUARY","MONTH_FEBRUARY","MONTH_MARCH","MONTH_APRIL","MONTH_MAY","MONTH_JUNE","MONTH_JULY","MONTH_AUGUST","MONTH_SEPTEMBER","MONTH_OCTOBER","MONTH_NOVEMBER","MONTH_DECEMBER"],"default":"MONTH_UNSPECIFIED","description":"Month represents months of the year.\n\n - MONTH_UNSPECIFIED: Unspecified month.\n - MONTH_JANUARY: January.\n - MONTH_FEBRUARY: February.\n - MONTH_MARCH: March.\n - MONTH_APRIL: April.\n - MONTH_MAY: May.\n - MONTH_JUNE: June.\n - MONTH_JULY: July.\n - MONTH_AUGUST: August.\n - MONTH_SEPTEMBER: September.\n - MONTH_OCTOBER: October.\n - MONTH_NOVEMBER: November.\n - MONTH_DECEMBER: December."},"v1TimeWindow":{"type":"object","properties":{"start_time":{"type":"string","format":"date-time","description":"The start time of the window (inclusive)."},"end_time":{"type":"string","format":"date-time","description":"The end time of the window (inclusive)."},"time_zone":{"type":"string","description":"The timezone for interpreting the time window.\nFormat: IANA timezone identifier (e.g., \"America/New_York\", \"Europe/London\").\nDefaults to \"UTC\" if not specified."}},"description":"Time window for querying insights.","required":["start_time","end_time"]},"v1ScheduleEnd":{"type":"object","properties":{"end_type":{"$ref":"#/components/schemas/v1ScheduleEndType"},"end_date":{"$ref":"#/components/schemas/typeDate"},"max_occurrences":{"type":"integer","format":"int32","description":"Number of occurrences when end_type is SCHEDULE_END_TYPE_AFTER_OCCURRENCES.\nSchedule stops after this many executions."}},"description":"ScheduleEnd defines when the schedule stops running.","required":["end_type"]},"v1ScheduleEndType":{"type":"string","enum":["SCHEDULE_END_TYPE_UNSPECIFIED","SCHEDULE_END_TYPE_NEVER","SCHEDULE_END_TYPE_ON_DATE","SCHEDULE_END_TYPE_AFTER_OCCURRENCES"],"default":"SCHEDULE_END_TYPE_UNSPECIFIED","description":"ScheduleEndType defines how a schedule terminates.\n\n - SCHEDULE_END_TYPE_UNSPECIFIED: Unspecified end type. Defaults to NEVER.\n - SCHEDULE_END_TYPE_NEVER: Schedule runs indefinitely (never ends).\n - SCHEDULE_END_TYPE_ON_DATE: Schedule ends on a specific date.\n - SCHEDULE_END_TYPE_AFTER_OCCURRENCES: Schedule ends after a specific number of occurrences."},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}/schedule":{"get":{"summary":"Get Automation Schedule","operationId":"GetAutomationSchedule","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1AutomationSchedule"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}}],"tags":["Automations"]}}}}
```

## POST /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations/{automation\_id}/schedule

> Create Automation Schedule

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1AutomationSchedule":{"type":"object","properties":{"name":{"type":"string","title":"Resource name of the schedule.\nFormat: organizations/{org}/workspaces/{ws}/automations/{automation}/schedule"},"config":{"$ref":"#/components/schemas/v1ScheduleConfig"},"enabled":{"type":"boolean","description":"Whether the schedule is currently enabled.\nDisabled schedules do not trigger automation invocations.","readOnly":true},"summary":{"type":"string","title":"Human-readable summary of the schedule for display in the UI.\nGenerated by the backend based on the schedule configuration.\nExamples: \"Every weekday at 9:00 AM PT\", \"Monthly on the 4th Friday at 2:30 PM\"","readOnly":true},"next_run_times":{"type":"array","items":{"type":"string","format":"date-time"},"description":"List of the next scheduled execution times.\nUseful for preview and verification. Backend generates these.","readOnly":true},"remaining_occurrences":{"type":"integer","format":"int32","description":"Number of remaining occurrences if the schedule has an end condition.\nOnly populated when config.end.end_type is SCHEDULE_END_TYPE_AFTER_OCCURRENCES.","readOnly":true}},"description":"AutomationSchedule represents a schedule for invoking an automation.\nEach automation can have at most one schedule. Kestra is the source of truth.","required":["config"]},"v1ScheduleConfig":{"type":"object","properties":{"start":{"$ref":"#/components/schemas/v1ScheduleStart"},"repeat_interval":{"$ref":"#/components/schemas/v1RepeatInterval"},"weekly_pattern":{"$ref":"#/components/schemas/v1DayOfWeekPattern"},"monthly_pattern":{"$ref":"#/components/schemas/v1DayOfMonthPattern"},"yearly_pattern":{"$ref":"#/components/schemas/v1MonthPattern"},"active_window":{"$ref":"#/components/schemas/v1TimeWindow"},"end":{"$ref":"#/components/schemas/v1ScheduleEnd"}},"description":"ScheduleConfig is the main user-friendly configuration for automation schedules.\nThe backend generates the appropriate scheduling logic from this configuration.","required":["start"]},"v1ScheduleStart":{"type":"object","properties":{"start_date":{"$ref":"#/components/schemas/typeDate"},"time":{"$ref":"#/components/schemas/typeTimeOfDay"},"time_zone":{"type":"string","description":"Timezone for the schedule. Defaults to \"UTC\" if not specified.\nUse IANA timezone identifiers (e.g., \"America/New_York\", \"America/Los_Angeles\", \"Europe/London\")."}},"description":"ScheduleStart defines when the schedule begins."},"typeDate":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year."},"month":{"type":"integer","format":"int32","description":"Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day."},"day":{"type":"integer","format":"int32","description":"Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant."}},"description":"* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.","title":"Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:"},"typeTimeOfDay":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","description":"Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time."},"minutes":{"type":"integer","format":"int32","description":"Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."}},"description":"Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`."},"v1RepeatInterval":{"type":"object","properties":{"unit":{"$ref":"#/components/schemas/v1FrequencyUnit"},"interval":{"type":"integer","format":"int32","description":"The interval value. For example, 2 with FREQUENCY_UNIT_WEEK means \"every 2 weeks\".\nMust be a positive integer. Defaults to 1 if not specified."}},"description":"RepeatInterval defines how often the schedule repeats.","required":["unit"]},"v1FrequencyUnit":{"type":"string","enum":["FREQUENCY_UNIT_UNSPECIFIED","FREQUENCY_UNIT_MINUTE","FREQUENCY_UNIT_HOUR","FREQUENCY_UNIT_DAY","FREQUENCY_UNIT_WEEK","FREQUENCY_UNIT_MONTH","FREQUENCY_UNIT_YEAR"],"default":"FREQUENCY_UNIT_UNSPECIFIED","description":"FrequencyUnit defines the unit for schedule repetition.\n\n - FREQUENCY_UNIT_UNSPECIFIED: Unspecified frequency unit.\n - FREQUENCY_UNIT_MINUTE: Schedule repeats every N minutes.\n - FREQUENCY_UNIT_HOUR: Schedule repeats every N hours.\n - FREQUENCY_UNIT_DAY: Schedule repeats every N days.\n - FREQUENCY_UNIT_WEEK: Schedule repeats every N weeks.\n - FREQUENCY_UNIT_MONTH: Schedule repeats every N months.\n - FREQUENCY_UNIT_YEAR: Schedule repeats every N years."},"v1DayOfWeekPattern":{"type":"object","properties":{"days":{"type":"array","items":{"$ref":"#/components/schemas/v1DayOfWeek"},"description":"Days of the week when the schedule should run.\nAt least one day must be specified."}},"description":"DayOfWeekPattern specifies which days of the week to run.\nUsed for weekly schedules (e.g., \"every Monday\", \"every Mon/Wed/Fri\").","required":["days"]},"v1DayOfWeek":{"type":"string","enum":["DAY_OF_WEEK_UNSPECIFIED","DAY_OF_WEEK_MONDAY","DAY_OF_WEEK_TUESDAY","DAY_OF_WEEK_WEDNESDAY","DAY_OF_WEEK_THURSDAY","DAY_OF_WEEK_FRIDAY","DAY_OF_WEEK_SATURDAY","DAY_OF_WEEK_SUNDAY"],"default":"DAY_OF_WEEK_UNSPECIFIED","description":"DayOfWeek represents days of the week for scheduling.\nValues align with ISO 8601 (Monday = 1, Sunday = 7).\n\n - DAY_OF_WEEK_UNSPECIFIED: Unspecified day.\n - DAY_OF_WEEK_MONDAY: Monday.\n - DAY_OF_WEEK_TUESDAY: Tuesday.\n - DAY_OF_WEEK_WEDNESDAY: Wednesday.\n - DAY_OF_WEEK_THURSDAY: Thursday.\n - DAY_OF_WEEK_FRIDAY: Friday.\n - DAY_OF_WEEK_SATURDAY: Saturday.\n - DAY_OF_WEEK_SUNDAY: Sunday."},"v1DayOfMonthPattern":{"type":"object","properties":{"day_number":{"type":"integer","format":"int32","description":"Run on a specific day of the month (1-31).\nIf the month has fewer days, runs on the last day of that month."},"ordinal_day":{"$ref":"#/components/schemas/v1OrdinalDayOfWeek"}},"description":"DayOfMonthPattern specifies which day(s) of the month to run.\nUsed for monthly schedules."},"v1OrdinalDayOfWeek":{"type":"object","properties":{"ordinal":{"$ref":"#/components/schemas/v1Ordinal"},"day":{"$ref":"#/components/schemas/v1DayOfWeek"}},"description":"OrdinalDayOfWeek represents a pattern like \"first Monday\" or \"last Friday\".\nUsed as a building block for monthly and yearly patterns.","required":["ordinal","day"]},"v1Ordinal":{"type":"string","enum":["ORDINAL_UNSPECIFIED","ORDINAL_FIRST","ORDINAL_SECOND","ORDINAL_THIRD","ORDINAL_FOURTH","ORDINAL_FIFTH","ORDINAL_LAST"],"default":"ORDINAL_UNSPECIFIED","description":"Ordinal represents the position within a period (e.g., \"first Monday of month\").\n\n - ORDINAL_UNSPECIFIED: Unspecified ordinal.\n - ORDINAL_FIRST: First occurrence (e.g., first Monday).\n - ORDINAL_SECOND: Second occurrence.\n - ORDINAL_THIRD: Third occurrence.\n - ORDINAL_FOURTH: Fourth occurrence.\n - ORDINAL_FIFTH: Fifth occurrence (not all months have a fifth occurrence of each day).\n - ORDINAL_LAST: Last occurrence (e.g., last Friday of month)."},"v1MonthPattern":{"type":"object","properties":{"month":{"$ref":"#/components/schemas/v1Month"},"day_pattern":{"$ref":"#/components/schemas/v1DayOfMonthPattern"}},"description":"MonthPattern specifies which month and day to run.\nUsed for yearly schedules (e.g., \"July 30\", \"last Friday of December\").","required":["month","day_pattern"]},"v1Month":{"type":"string","enum":["MONTH_UNSPECIFIED","MONTH_JANUARY","MONTH_FEBRUARY","MONTH_MARCH","MONTH_APRIL","MONTH_MAY","MONTH_JUNE","MONTH_JULY","MONTH_AUGUST","MONTH_SEPTEMBER","MONTH_OCTOBER","MONTH_NOVEMBER","MONTH_DECEMBER"],"default":"MONTH_UNSPECIFIED","description":"Month represents months of the year.\n\n - MONTH_UNSPECIFIED: Unspecified month.\n - MONTH_JANUARY: January.\n - MONTH_FEBRUARY: February.\n - MONTH_MARCH: March.\n - MONTH_APRIL: April.\n - MONTH_MAY: May.\n - MONTH_JUNE: June.\n - MONTH_JULY: July.\n - MONTH_AUGUST: August.\n - MONTH_SEPTEMBER: September.\n - MONTH_OCTOBER: October.\n - MONTH_NOVEMBER: November.\n - MONTH_DECEMBER: December."},"v1TimeWindow":{"type":"object","properties":{"start_time":{"type":"string","format":"date-time","description":"The start time of the window (inclusive)."},"end_time":{"type":"string","format":"date-time","description":"The end time of the window (inclusive)."},"time_zone":{"type":"string","description":"The timezone for interpreting the time window.\nFormat: IANA timezone identifier (e.g., \"America/New_York\", \"Europe/London\").\nDefaults to \"UTC\" if not specified."}},"description":"Time window for querying insights.","required":["start_time","end_time"]},"v1ScheduleEnd":{"type":"object","properties":{"end_type":{"$ref":"#/components/schemas/v1ScheduleEndType"},"end_date":{"$ref":"#/components/schemas/typeDate"},"max_occurrences":{"type":"integer","format":"int32","description":"Number of occurrences when end_type is SCHEDULE_END_TYPE_AFTER_OCCURRENCES.\nSchedule stops after this many executions."}},"description":"ScheduleEnd defines when the schedule stops running.","required":["end_type"]},"v1ScheduleEndType":{"type":"string","enum":["SCHEDULE_END_TYPE_UNSPECIFIED","SCHEDULE_END_TYPE_NEVER","SCHEDULE_END_TYPE_ON_DATE","SCHEDULE_END_TYPE_AFTER_OCCURRENCES"],"default":"SCHEDULE_END_TYPE_UNSPECIFIED","description":"ScheduleEndType defines how a schedule terminates.\n\n - SCHEDULE_END_TYPE_UNSPECIFIED: Unspecified end type. Defaults to NEVER.\n - SCHEDULE_END_TYPE_NEVER: Schedule runs indefinitely (never ends).\n - SCHEDULE_END_TYPE_ON_DATE: Schedule ends on a specific date.\n - SCHEDULE_END_TYPE_AFTER_OCCURRENCES: Schedule ends after a specific number of occurrences."},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}/schedule":{"post":{"summary":"Create Automation Schedule","operationId":"CreateAutomationSchedule","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1AutomationSchedule"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1AutomationSchedule"}}},"description":"The schedule to create.","required":true},"tags":["Automations"]}}}}
```

## DELETE /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations/{automation\_id}/schedule

> Delete Automation Schedule

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}/schedule":{"delete":{"summary":"Delete Automation Schedule","operationId":"DeleteAutomationSchedule","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}}],"tags":["Automations"]}}}}
```

## PATCH /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations/{automation\_id}/schedule

> Update Automation Schedule

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1AutomationSchedule":{"type":"object","properties":{"name":{"type":"string","title":"Resource name of the schedule.\nFormat: organizations/{org}/workspaces/{ws}/automations/{automation}/schedule"},"config":{"$ref":"#/components/schemas/v1ScheduleConfig"},"enabled":{"type":"boolean","description":"Whether the schedule is currently enabled.\nDisabled schedules do not trigger automation invocations.","readOnly":true},"summary":{"type":"string","title":"Human-readable summary of the schedule for display in the UI.\nGenerated by the backend based on the schedule configuration.\nExamples: \"Every weekday at 9:00 AM PT\", \"Monthly on the 4th Friday at 2:30 PM\"","readOnly":true},"next_run_times":{"type":"array","items":{"type":"string","format":"date-time"},"description":"List of the next scheduled execution times.\nUseful for preview and verification. Backend generates these.","readOnly":true},"remaining_occurrences":{"type":"integer","format":"int32","description":"Number of remaining occurrences if the schedule has an end condition.\nOnly populated when config.end.end_type is SCHEDULE_END_TYPE_AFTER_OCCURRENCES.","readOnly":true}},"description":"AutomationSchedule represents a schedule for invoking an automation.\nEach automation can have at most one schedule. Kestra is the source of truth.","required":["config"]},"v1ScheduleConfig":{"type":"object","properties":{"start":{"$ref":"#/components/schemas/v1ScheduleStart"},"repeat_interval":{"$ref":"#/components/schemas/v1RepeatInterval"},"weekly_pattern":{"$ref":"#/components/schemas/v1DayOfWeekPattern"},"monthly_pattern":{"$ref":"#/components/schemas/v1DayOfMonthPattern"},"yearly_pattern":{"$ref":"#/components/schemas/v1MonthPattern"},"active_window":{"$ref":"#/components/schemas/v1TimeWindow"},"end":{"$ref":"#/components/schemas/v1ScheduleEnd"}},"description":"ScheduleConfig is the main user-friendly configuration for automation schedules.\nThe backend generates the appropriate scheduling logic from this configuration.","required":["start"]},"v1ScheduleStart":{"type":"object","properties":{"start_date":{"$ref":"#/components/schemas/typeDate"},"time":{"$ref":"#/components/schemas/typeTimeOfDay"},"time_zone":{"type":"string","description":"Timezone for the schedule. Defaults to \"UTC\" if not specified.\nUse IANA timezone identifiers (e.g., \"America/New_York\", \"America/Los_Angeles\", \"Europe/London\")."}},"description":"ScheduleStart defines when the schedule begins."},"typeDate":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year."},"month":{"type":"integer","format":"int32","description":"Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day."},"day":{"type":"integer","format":"int32","description":"Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant."}},"description":"* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.","title":"Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:"},"typeTimeOfDay":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","description":"Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time."},"minutes":{"type":"integer","format":"int32","description":"Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."}},"description":"Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`."},"v1RepeatInterval":{"type":"object","properties":{"unit":{"$ref":"#/components/schemas/v1FrequencyUnit"},"interval":{"type":"integer","format":"int32","description":"The interval value. For example, 2 with FREQUENCY_UNIT_WEEK means \"every 2 weeks\".\nMust be a positive integer. Defaults to 1 if not specified."}},"description":"RepeatInterval defines how often the schedule repeats.","required":["unit"]},"v1FrequencyUnit":{"type":"string","enum":["FREQUENCY_UNIT_UNSPECIFIED","FREQUENCY_UNIT_MINUTE","FREQUENCY_UNIT_HOUR","FREQUENCY_UNIT_DAY","FREQUENCY_UNIT_WEEK","FREQUENCY_UNIT_MONTH","FREQUENCY_UNIT_YEAR"],"default":"FREQUENCY_UNIT_UNSPECIFIED","description":"FrequencyUnit defines the unit for schedule repetition.\n\n - FREQUENCY_UNIT_UNSPECIFIED: Unspecified frequency unit.\n - FREQUENCY_UNIT_MINUTE: Schedule repeats every N minutes.\n - FREQUENCY_UNIT_HOUR: Schedule repeats every N hours.\n - FREQUENCY_UNIT_DAY: Schedule repeats every N days.\n - FREQUENCY_UNIT_WEEK: Schedule repeats every N weeks.\n - FREQUENCY_UNIT_MONTH: Schedule repeats every N months.\n - FREQUENCY_UNIT_YEAR: Schedule repeats every N years."},"v1DayOfWeekPattern":{"type":"object","properties":{"days":{"type":"array","items":{"$ref":"#/components/schemas/v1DayOfWeek"},"description":"Days of the week when the schedule should run.\nAt least one day must be specified."}},"description":"DayOfWeekPattern specifies which days of the week to run.\nUsed for weekly schedules (e.g., \"every Monday\", \"every Mon/Wed/Fri\").","required":["days"]},"v1DayOfWeek":{"type":"string","enum":["DAY_OF_WEEK_UNSPECIFIED","DAY_OF_WEEK_MONDAY","DAY_OF_WEEK_TUESDAY","DAY_OF_WEEK_WEDNESDAY","DAY_OF_WEEK_THURSDAY","DAY_OF_WEEK_FRIDAY","DAY_OF_WEEK_SATURDAY","DAY_OF_WEEK_SUNDAY"],"default":"DAY_OF_WEEK_UNSPECIFIED","description":"DayOfWeek represents days of the week for scheduling.\nValues align with ISO 8601 (Monday = 1, Sunday = 7).\n\n - DAY_OF_WEEK_UNSPECIFIED: Unspecified day.\n - DAY_OF_WEEK_MONDAY: Monday.\n - DAY_OF_WEEK_TUESDAY: Tuesday.\n - DAY_OF_WEEK_WEDNESDAY: Wednesday.\n - DAY_OF_WEEK_THURSDAY: Thursday.\n - DAY_OF_WEEK_FRIDAY: Friday.\n - DAY_OF_WEEK_SATURDAY: Saturday.\n - DAY_OF_WEEK_SUNDAY: Sunday."},"v1DayOfMonthPattern":{"type":"object","properties":{"day_number":{"type":"integer","format":"int32","description":"Run on a specific day of the month (1-31).\nIf the month has fewer days, runs on the last day of that month."},"ordinal_day":{"$ref":"#/components/schemas/v1OrdinalDayOfWeek"}},"description":"DayOfMonthPattern specifies which day(s) of the month to run.\nUsed for monthly schedules."},"v1OrdinalDayOfWeek":{"type":"object","properties":{"ordinal":{"$ref":"#/components/schemas/v1Ordinal"},"day":{"$ref":"#/components/schemas/v1DayOfWeek"}},"description":"OrdinalDayOfWeek represents a pattern like \"first Monday\" or \"last Friday\".\nUsed as a building block for monthly and yearly patterns.","required":["ordinal","day"]},"v1Ordinal":{"type":"string","enum":["ORDINAL_UNSPECIFIED","ORDINAL_FIRST","ORDINAL_SECOND","ORDINAL_THIRD","ORDINAL_FOURTH","ORDINAL_FIFTH","ORDINAL_LAST"],"default":"ORDINAL_UNSPECIFIED","description":"Ordinal represents the position within a period (e.g., \"first Monday of month\").\n\n - ORDINAL_UNSPECIFIED: Unspecified ordinal.\n - ORDINAL_FIRST: First occurrence (e.g., first Monday).\n - ORDINAL_SECOND: Second occurrence.\n - ORDINAL_THIRD: Third occurrence.\n - ORDINAL_FOURTH: Fourth occurrence.\n - ORDINAL_FIFTH: Fifth occurrence (not all months have a fifth occurrence of each day).\n - ORDINAL_LAST: Last occurrence (e.g., last Friday of month)."},"v1MonthPattern":{"type":"object","properties":{"month":{"$ref":"#/components/schemas/v1Month"},"day_pattern":{"$ref":"#/components/schemas/v1DayOfMonthPattern"}},"description":"MonthPattern specifies which month and day to run.\nUsed for yearly schedules (e.g., \"July 30\", \"last Friday of December\").","required":["month","day_pattern"]},"v1Month":{"type":"string","enum":["MONTH_UNSPECIFIED","MONTH_JANUARY","MONTH_FEBRUARY","MONTH_MARCH","MONTH_APRIL","MONTH_MAY","MONTH_JUNE","MONTH_JULY","MONTH_AUGUST","MONTH_SEPTEMBER","MONTH_OCTOBER","MONTH_NOVEMBER","MONTH_DECEMBER"],"default":"MONTH_UNSPECIFIED","description":"Month represents months of the year.\n\n - MONTH_UNSPECIFIED: Unspecified month.\n - MONTH_JANUARY: January.\n - MONTH_FEBRUARY: February.\n - MONTH_MARCH: March.\n - MONTH_APRIL: April.\n - MONTH_MAY: May.\n - MONTH_JUNE: June.\n - MONTH_JULY: July.\n - MONTH_AUGUST: August.\n - MONTH_SEPTEMBER: September.\n - MONTH_OCTOBER: October.\n - MONTH_NOVEMBER: November.\n - MONTH_DECEMBER: December."},"v1TimeWindow":{"type":"object","properties":{"start_time":{"type":"string","format":"date-time","description":"The start time of the window (inclusive)."},"end_time":{"type":"string","format":"date-time","description":"The end time of the window (inclusive)."},"time_zone":{"type":"string","description":"The timezone for interpreting the time window.\nFormat: IANA timezone identifier (e.g., \"America/New_York\", \"Europe/London\").\nDefaults to \"UTC\" if not specified."}},"description":"Time window for querying insights.","required":["start_time","end_time"]},"v1ScheduleEnd":{"type":"object","properties":{"end_type":{"$ref":"#/components/schemas/v1ScheduleEndType"},"end_date":{"$ref":"#/components/schemas/typeDate"},"max_occurrences":{"type":"integer","format":"int32","description":"Number of occurrences when end_type is SCHEDULE_END_TYPE_AFTER_OCCURRENCES.\nSchedule stops after this many executions."}},"description":"ScheduleEnd defines when the schedule stops running.","required":["end_type"]},"v1ScheduleEndType":{"type":"string","enum":["SCHEDULE_END_TYPE_UNSPECIFIED","SCHEDULE_END_TYPE_NEVER","SCHEDULE_END_TYPE_ON_DATE","SCHEDULE_END_TYPE_AFTER_OCCURRENCES"],"default":"SCHEDULE_END_TYPE_UNSPECIFIED","description":"ScheduleEndType defines how a schedule terminates.\n\n - SCHEDULE_END_TYPE_UNSPECIFIED: Unspecified end type. Defaults to NEVER.\n - SCHEDULE_END_TYPE_NEVER: Schedule runs indefinitely (never ends).\n - SCHEDULE_END_TYPE_ON_DATE: Schedule ends on a specific date.\n - SCHEDULE_END_TYPE_AFTER_OCCURRENCES: Schedule ends after a specific number of occurrences."},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}/schedule":{"patch":{"summary":"Update Automation Schedule","operationId":"UpdateAutomationSchedule","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1AutomationSchedule"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"config":{"$ref":"#/components/schemas/v1ScheduleConfig"},"enabled":{"type":"boolean","description":"Whether the schedule is currently enabled.\nDisabled schedules do not trigger automation invocations.","readOnly":true},"summary":{"type":"string","title":"Human-readable summary of the schedule for display in the UI.\nGenerated by the backend based on the schedule configuration.\nExamples: \"Every weekday at 9:00 AM PT\", \"Monthly on the 4th Friday at 2:30 PM\"","readOnly":true},"next_run_times":{"type":"array","items":{"type":"string","format":"date-time"},"description":"List of the next scheduled execution times.\nUseful for preview and verification. Backend generates these.","readOnly":true},"remaining_occurrences":{"type":"integer","format":"int32","description":"Number of remaining occurrences if the schedule has an end condition.\nOnly populated when config.end.end_type is SCHEDULE_END_TYPE_AFTER_OCCURRENCES.","readOnly":true}},"title":"The schedule to update.","required":["config"]}}},"description":"The schedule to update.","required":true},"tags":["Automations"]}}}}
```

## POST /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations/{automation\_id}:disableAutomationSchedule

> Disable Automation Schedule

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1DisableAutomationScheduleResponse":{"type":"object","properties":{"schedule":{"$ref":"#/components/schemas/v1AutomationSchedule"}},"description":"DisableAutomationScheduleResponse contains the disabled schedule."},"v1AutomationSchedule":{"type":"object","properties":{"name":{"type":"string","title":"Resource name of the schedule.\nFormat: organizations/{org}/workspaces/{ws}/automations/{automation}/schedule"},"config":{"$ref":"#/components/schemas/v1ScheduleConfig"},"enabled":{"type":"boolean","description":"Whether the schedule is currently enabled.\nDisabled schedules do not trigger automation invocations.","readOnly":true},"summary":{"type":"string","title":"Human-readable summary of the schedule for display in the UI.\nGenerated by the backend based on the schedule configuration.\nExamples: \"Every weekday at 9:00 AM PT\", \"Monthly on the 4th Friday at 2:30 PM\"","readOnly":true},"next_run_times":{"type":"array","items":{"type":"string","format":"date-time"},"description":"List of the next scheduled execution times.\nUseful for preview and verification. Backend generates these.","readOnly":true},"remaining_occurrences":{"type":"integer","format":"int32","description":"Number of remaining occurrences if the schedule has an end condition.\nOnly populated when config.end.end_type is SCHEDULE_END_TYPE_AFTER_OCCURRENCES.","readOnly":true}},"description":"AutomationSchedule represents a schedule for invoking an automation.\nEach automation can have at most one schedule. Kestra is the source of truth.","required":["config"]},"v1ScheduleConfig":{"type":"object","properties":{"start":{"$ref":"#/components/schemas/v1ScheduleStart"},"repeat_interval":{"$ref":"#/components/schemas/v1RepeatInterval"},"weekly_pattern":{"$ref":"#/components/schemas/v1DayOfWeekPattern"},"monthly_pattern":{"$ref":"#/components/schemas/v1DayOfMonthPattern"},"yearly_pattern":{"$ref":"#/components/schemas/v1MonthPattern"},"active_window":{"$ref":"#/components/schemas/v1TimeWindow"},"end":{"$ref":"#/components/schemas/v1ScheduleEnd"}},"description":"ScheduleConfig is the main user-friendly configuration for automation schedules.\nThe backend generates the appropriate scheduling logic from this configuration.","required":["start"]},"v1ScheduleStart":{"type":"object","properties":{"start_date":{"$ref":"#/components/schemas/typeDate"},"time":{"$ref":"#/components/schemas/typeTimeOfDay"},"time_zone":{"type":"string","description":"Timezone for the schedule. Defaults to \"UTC\" if not specified.\nUse IANA timezone identifiers (e.g., \"America/New_York\", \"America/Los_Angeles\", \"Europe/London\")."}},"description":"ScheduleStart defines when the schedule begins."},"typeDate":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year."},"month":{"type":"integer","format":"int32","description":"Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day."},"day":{"type":"integer","format":"int32","description":"Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant."}},"description":"* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.","title":"Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:"},"typeTimeOfDay":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","description":"Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time."},"minutes":{"type":"integer","format":"int32","description":"Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."}},"description":"Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`."},"v1RepeatInterval":{"type":"object","properties":{"unit":{"$ref":"#/components/schemas/v1FrequencyUnit"},"interval":{"type":"integer","format":"int32","description":"The interval value. For example, 2 with FREQUENCY_UNIT_WEEK means \"every 2 weeks\".\nMust be a positive integer. Defaults to 1 if not specified."}},"description":"RepeatInterval defines how often the schedule repeats.","required":["unit"]},"v1FrequencyUnit":{"type":"string","enum":["FREQUENCY_UNIT_UNSPECIFIED","FREQUENCY_UNIT_MINUTE","FREQUENCY_UNIT_HOUR","FREQUENCY_UNIT_DAY","FREQUENCY_UNIT_WEEK","FREQUENCY_UNIT_MONTH","FREQUENCY_UNIT_YEAR"],"default":"FREQUENCY_UNIT_UNSPECIFIED","description":"FrequencyUnit defines the unit for schedule repetition.\n\n - FREQUENCY_UNIT_UNSPECIFIED: Unspecified frequency unit.\n - FREQUENCY_UNIT_MINUTE: Schedule repeats every N minutes.\n - FREQUENCY_UNIT_HOUR: Schedule repeats every N hours.\n - FREQUENCY_UNIT_DAY: Schedule repeats every N days.\n - FREQUENCY_UNIT_WEEK: Schedule repeats every N weeks.\n - FREQUENCY_UNIT_MONTH: Schedule repeats every N months.\n - FREQUENCY_UNIT_YEAR: Schedule repeats every N years."},"v1DayOfWeekPattern":{"type":"object","properties":{"days":{"type":"array","items":{"$ref":"#/components/schemas/v1DayOfWeek"},"description":"Days of the week when the schedule should run.\nAt least one day must be specified."}},"description":"DayOfWeekPattern specifies which days of the week to run.\nUsed for weekly schedules (e.g., \"every Monday\", \"every Mon/Wed/Fri\").","required":["days"]},"v1DayOfWeek":{"type":"string","enum":["DAY_OF_WEEK_UNSPECIFIED","DAY_OF_WEEK_MONDAY","DAY_OF_WEEK_TUESDAY","DAY_OF_WEEK_WEDNESDAY","DAY_OF_WEEK_THURSDAY","DAY_OF_WEEK_FRIDAY","DAY_OF_WEEK_SATURDAY","DAY_OF_WEEK_SUNDAY"],"default":"DAY_OF_WEEK_UNSPECIFIED","description":"DayOfWeek represents days of the week for scheduling.\nValues align with ISO 8601 (Monday = 1, Sunday = 7).\n\n - DAY_OF_WEEK_UNSPECIFIED: Unspecified day.\n - DAY_OF_WEEK_MONDAY: Monday.\n - DAY_OF_WEEK_TUESDAY: Tuesday.\n - DAY_OF_WEEK_WEDNESDAY: Wednesday.\n - DAY_OF_WEEK_THURSDAY: Thursday.\n - DAY_OF_WEEK_FRIDAY: Friday.\n - DAY_OF_WEEK_SATURDAY: Saturday.\n - DAY_OF_WEEK_SUNDAY: Sunday."},"v1DayOfMonthPattern":{"type":"object","properties":{"day_number":{"type":"integer","format":"int32","description":"Run on a specific day of the month (1-31).\nIf the month has fewer days, runs on the last day of that month."},"ordinal_day":{"$ref":"#/components/schemas/v1OrdinalDayOfWeek"}},"description":"DayOfMonthPattern specifies which day(s) of the month to run.\nUsed for monthly schedules."},"v1OrdinalDayOfWeek":{"type":"object","properties":{"ordinal":{"$ref":"#/components/schemas/v1Ordinal"},"day":{"$ref":"#/components/schemas/v1DayOfWeek"}},"description":"OrdinalDayOfWeek represents a pattern like \"first Monday\" or \"last Friday\".\nUsed as a building block for monthly and yearly patterns.","required":["ordinal","day"]},"v1Ordinal":{"type":"string","enum":["ORDINAL_UNSPECIFIED","ORDINAL_FIRST","ORDINAL_SECOND","ORDINAL_THIRD","ORDINAL_FOURTH","ORDINAL_FIFTH","ORDINAL_LAST"],"default":"ORDINAL_UNSPECIFIED","description":"Ordinal represents the position within a period (e.g., \"first Monday of month\").\n\n - ORDINAL_UNSPECIFIED: Unspecified ordinal.\n - ORDINAL_FIRST: First occurrence (e.g., first Monday).\n - ORDINAL_SECOND: Second occurrence.\n - ORDINAL_THIRD: Third occurrence.\n - ORDINAL_FOURTH: Fourth occurrence.\n - ORDINAL_FIFTH: Fifth occurrence (not all months have a fifth occurrence of each day).\n - ORDINAL_LAST: Last occurrence (e.g., last Friday of month)."},"v1MonthPattern":{"type":"object","properties":{"month":{"$ref":"#/components/schemas/v1Month"},"day_pattern":{"$ref":"#/components/schemas/v1DayOfMonthPattern"}},"description":"MonthPattern specifies which month and day to run.\nUsed for yearly schedules (e.g., \"July 30\", \"last Friday of December\").","required":["month","day_pattern"]},"v1Month":{"type":"string","enum":["MONTH_UNSPECIFIED","MONTH_JANUARY","MONTH_FEBRUARY","MONTH_MARCH","MONTH_APRIL","MONTH_MAY","MONTH_JUNE","MONTH_JULY","MONTH_AUGUST","MONTH_SEPTEMBER","MONTH_OCTOBER","MONTH_NOVEMBER","MONTH_DECEMBER"],"default":"MONTH_UNSPECIFIED","description":"Month represents months of the year.\n\n - MONTH_UNSPECIFIED: Unspecified month.\n - MONTH_JANUARY: January.\n - MONTH_FEBRUARY: February.\n - MONTH_MARCH: March.\n - MONTH_APRIL: April.\n - MONTH_MAY: May.\n - MONTH_JUNE: June.\n - MONTH_JULY: July.\n - MONTH_AUGUST: August.\n - MONTH_SEPTEMBER: September.\n - MONTH_OCTOBER: October.\n - MONTH_NOVEMBER: November.\n - MONTH_DECEMBER: December."},"v1TimeWindow":{"type":"object","properties":{"start_time":{"type":"string","format":"date-time","description":"The start time of the window (inclusive)."},"end_time":{"type":"string","format":"date-time","description":"The end time of the window (inclusive)."},"time_zone":{"type":"string","description":"The timezone for interpreting the time window.\nFormat: IANA timezone identifier (e.g., \"America/New_York\", \"Europe/London\").\nDefaults to \"UTC\" if not specified."}},"description":"Time window for querying insights.","required":["start_time","end_time"]},"v1ScheduleEnd":{"type":"object","properties":{"end_type":{"$ref":"#/components/schemas/v1ScheduleEndType"},"end_date":{"$ref":"#/components/schemas/typeDate"},"max_occurrences":{"type":"integer","format":"int32","description":"Number of occurrences when end_type is SCHEDULE_END_TYPE_AFTER_OCCURRENCES.\nSchedule stops after this many executions."}},"description":"ScheduleEnd defines when the schedule stops running.","required":["end_type"]},"v1ScheduleEndType":{"type":"string","enum":["SCHEDULE_END_TYPE_UNSPECIFIED","SCHEDULE_END_TYPE_NEVER","SCHEDULE_END_TYPE_ON_DATE","SCHEDULE_END_TYPE_AFTER_OCCURRENCES"],"default":"SCHEDULE_END_TYPE_UNSPECIFIED","description":"ScheduleEndType defines how a schedule terminates.\n\n - SCHEDULE_END_TYPE_UNSPECIFIED: Unspecified end type. Defaults to NEVER.\n - SCHEDULE_END_TYPE_NEVER: Schedule runs indefinitely (never ends).\n - SCHEDULE_END_TYPE_ON_DATE: Schedule ends on a specific date.\n - SCHEDULE_END_TYPE_AFTER_OCCURRENCES: Schedule ends after a specific number of occurrences."},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"DisableAutomationScheduleBody":{"type":"object","description":"DisableAutomationScheduleRequest is the request to disable a schedule (pause without deleting)."}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}:disableAutomationSchedule":{"post":{"summary":"Disable Automation Schedule","operationId":"DisableAutomationSchedule","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1DisableAutomationScheduleResponse"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisableAutomationScheduleBody"}}},"required":true},"tags":["Automations"]}}}}
```

## POST /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations/{automation\_id}:enableAutomationSchedule

> Enable Automation Schedule

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1EnableAutomationScheduleResponse":{"type":"object","properties":{"schedule":{"$ref":"#/components/schemas/v1AutomationSchedule"}},"description":"EnableAutomationScheduleResponse contains the enabled schedule."},"v1AutomationSchedule":{"type":"object","properties":{"name":{"type":"string","title":"Resource name of the schedule.\nFormat: organizations/{org}/workspaces/{ws}/automations/{automation}/schedule"},"config":{"$ref":"#/components/schemas/v1ScheduleConfig"},"enabled":{"type":"boolean","description":"Whether the schedule is currently enabled.\nDisabled schedules do not trigger automation invocations.","readOnly":true},"summary":{"type":"string","title":"Human-readable summary of the schedule for display in the UI.\nGenerated by the backend based on the schedule configuration.\nExamples: \"Every weekday at 9:00 AM PT\", \"Monthly on the 4th Friday at 2:30 PM\"","readOnly":true},"next_run_times":{"type":"array","items":{"type":"string","format":"date-time"},"description":"List of the next scheduled execution times.\nUseful for preview and verification. Backend generates these.","readOnly":true},"remaining_occurrences":{"type":"integer","format":"int32","description":"Number of remaining occurrences if the schedule has an end condition.\nOnly populated when config.end.end_type is SCHEDULE_END_TYPE_AFTER_OCCURRENCES.","readOnly":true}},"description":"AutomationSchedule represents a schedule for invoking an automation.\nEach automation can have at most one schedule. Kestra is the source of truth.","required":["config"]},"v1ScheduleConfig":{"type":"object","properties":{"start":{"$ref":"#/components/schemas/v1ScheduleStart"},"repeat_interval":{"$ref":"#/components/schemas/v1RepeatInterval"},"weekly_pattern":{"$ref":"#/components/schemas/v1DayOfWeekPattern"},"monthly_pattern":{"$ref":"#/components/schemas/v1DayOfMonthPattern"},"yearly_pattern":{"$ref":"#/components/schemas/v1MonthPattern"},"active_window":{"$ref":"#/components/schemas/v1TimeWindow"},"end":{"$ref":"#/components/schemas/v1ScheduleEnd"}},"description":"ScheduleConfig is the main user-friendly configuration for automation schedules.\nThe backend generates the appropriate scheduling logic from this configuration.","required":["start"]},"v1ScheduleStart":{"type":"object","properties":{"start_date":{"$ref":"#/components/schemas/typeDate"},"time":{"$ref":"#/components/schemas/typeTimeOfDay"},"time_zone":{"type":"string","description":"Timezone for the schedule. Defaults to \"UTC\" if not specified.\nUse IANA timezone identifiers (e.g., \"America/New_York\", \"America/Los_Angeles\", \"Europe/London\")."}},"description":"ScheduleStart defines when the schedule begins."},"typeDate":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year."},"month":{"type":"integer","format":"int32","description":"Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day."},"day":{"type":"integer","format":"int32","description":"Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant."}},"description":"* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.","title":"Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:"},"typeTimeOfDay":{"type":"object","properties":{"hours":{"type":"integer","format":"int32","description":"Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time."},"minutes":{"type":"integer","format":"int32","description":"Minutes of hour of day. Must be from 0 to 59."},"seconds":{"type":"integer","format":"int32","description":"Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds."},"nanos":{"type":"integer","format":"int32","description":"Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."}},"description":"Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`."},"v1RepeatInterval":{"type":"object","properties":{"unit":{"$ref":"#/components/schemas/v1FrequencyUnit"},"interval":{"type":"integer","format":"int32","description":"The interval value. For example, 2 with FREQUENCY_UNIT_WEEK means \"every 2 weeks\".\nMust be a positive integer. Defaults to 1 if not specified."}},"description":"RepeatInterval defines how often the schedule repeats.","required":["unit"]},"v1FrequencyUnit":{"type":"string","enum":["FREQUENCY_UNIT_UNSPECIFIED","FREQUENCY_UNIT_MINUTE","FREQUENCY_UNIT_HOUR","FREQUENCY_UNIT_DAY","FREQUENCY_UNIT_WEEK","FREQUENCY_UNIT_MONTH","FREQUENCY_UNIT_YEAR"],"default":"FREQUENCY_UNIT_UNSPECIFIED","description":"FrequencyUnit defines the unit for schedule repetition.\n\n - FREQUENCY_UNIT_UNSPECIFIED: Unspecified frequency unit.\n - FREQUENCY_UNIT_MINUTE: Schedule repeats every N minutes.\n - FREQUENCY_UNIT_HOUR: Schedule repeats every N hours.\n - FREQUENCY_UNIT_DAY: Schedule repeats every N days.\n - FREQUENCY_UNIT_WEEK: Schedule repeats every N weeks.\n - FREQUENCY_UNIT_MONTH: Schedule repeats every N months.\n - FREQUENCY_UNIT_YEAR: Schedule repeats every N years."},"v1DayOfWeekPattern":{"type":"object","properties":{"days":{"type":"array","items":{"$ref":"#/components/schemas/v1DayOfWeek"},"description":"Days of the week when the schedule should run.\nAt least one day must be specified."}},"description":"DayOfWeekPattern specifies which days of the week to run.\nUsed for weekly schedules (e.g., \"every Monday\", \"every Mon/Wed/Fri\").","required":["days"]},"v1DayOfWeek":{"type":"string","enum":["DAY_OF_WEEK_UNSPECIFIED","DAY_OF_WEEK_MONDAY","DAY_OF_WEEK_TUESDAY","DAY_OF_WEEK_WEDNESDAY","DAY_OF_WEEK_THURSDAY","DAY_OF_WEEK_FRIDAY","DAY_OF_WEEK_SATURDAY","DAY_OF_WEEK_SUNDAY"],"default":"DAY_OF_WEEK_UNSPECIFIED","description":"DayOfWeek represents days of the week for scheduling.\nValues align with ISO 8601 (Monday = 1, Sunday = 7).\n\n - DAY_OF_WEEK_UNSPECIFIED: Unspecified day.\n - DAY_OF_WEEK_MONDAY: Monday.\n - DAY_OF_WEEK_TUESDAY: Tuesday.\n - DAY_OF_WEEK_WEDNESDAY: Wednesday.\n - DAY_OF_WEEK_THURSDAY: Thursday.\n - DAY_OF_WEEK_FRIDAY: Friday.\n - DAY_OF_WEEK_SATURDAY: Saturday.\n - DAY_OF_WEEK_SUNDAY: Sunday."},"v1DayOfMonthPattern":{"type":"object","properties":{"day_number":{"type":"integer","format":"int32","description":"Run on a specific day of the month (1-31).\nIf the month has fewer days, runs on the last day of that month."},"ordinal_day":{"$ref":"#/components/schemas/v1OrdinalDayOfWeek"}},"description":"DayOfMonthPattern specifies which day(s) of the month to run.\nUsed for monthly schedules."},"v1OrdinalDayOfWeek":{"type":"object","properties":{"ordinal":{"$ref":"#/components/schemas/v1Ordinal"},"day":{"$ref":"#/components/schemas/v1DayOfWeek"}},"description":"OrdinalDayOfWeek represents a pattern like \"first Monday\" or \"last Friday\".\nUsed as a building block for monthly and yearly patterns.","required":["ordinal","day"]},"v1Ordinal":{"type":"string","enum":["ORDINAL_UNSPECIFIED","ORDINAL_FIRST","ORDINAL_SECOND","ORDINAL_THIRD","ORDINAL_FOURTH","ORDINAL_FIFTH","ORDINAL_LAST"],"default":"ORDINAL_UNSPECIFIED","description":"Ordinal represents the position within a period (e.g., \"first Monday of month\").\n\n - ORDINAL_UNSPECIFIED: Unspecified ordinal.\n - ORDINAL_FIRST: First occurrence (e.g., first Monday).\n - ORDINAL_SECOND: Second occurrence.\n - ORDINAL_THIRD: Third occurrence.\n - ORDINAL_FOURTH: Fourth occurrence.\n - ORDINAL_FIFTH: Fifth occurrence (not all months have a fifth occurrence of each day).\n - ORDINAL_LAST: Last occurrence (e.g., last Friday of month)."},"v1MonthPattern":{"type":"object","properties":{"month":{"$ref":"#/components/schemas/v1Month"},"day_pattern":{"$ref":"#/components/schemas/v1DayOfMonthPattern"}},"description":"MonthPattern specifies which month and day to run.\nUsed for yearly schedules (e.g., \"July 30\", \"last Friday of December\").","required":["month","day_pattern"]},"v1Month":{"type":"string","enum":["MONTH_UNSPECIFIED","MONTH_JANUARY","MONTH_FEBRUARY","MONTH_MARCH","MONTH_APRIL","MONTH_MAY","MONTH_JUNE","MONTH_JULY","MONTH_AUGUST","MONTH_SEPTEMBER","MONTH_OCTOBER","MONTH_NOVEMBER","MONTH_DECEMBER"],"default":"MONTH_UNSPECIFIED","description":"Month represents months of the year.\n\n - MONTH_UNSPECIFIED: Unspecified month.\n - MONTH_JANUARY: January.\n - MONTH_FEBRUARY: February.\n - MONTH_MARCH: March.\n - MONTH_APRIL: April.\n - MONTH_MAY: May.\n - MONTH_JUNE: June.\n - MONTH_JULY: July.\n - MONTH_AUGUST: August.\n - MONTH_SEPTEMBER: September.\n - MONTH_OCTOBER: October.\n - MONTH_NOVEMBER: November.\n - MONTH_DECEMBER: December."},"v1TimeWindow":{"type":"object","properties":{"start_time":{"type":"string","format":"date-time","description":"The start time of the window (inclusive)."},"end_time":{"type":"string","format":"date-time","description":"The end time of the window (inclusive)."},"time_zone":{"type":"string","description":"The timezone for interpreting the time window.\nFormat: IANA timezone identifier (e.g., \"America/New_York\", \"Europe/London\").\nDefaults to \"UTC\" if not specified."}},"description":"Time window for querying insights.","required":["start_time","end_time"]},"v1ScheduleEnd":{"type":"object","properties":{"end_type":{"$ref":"#/components/schemas/v1ScheduleEndType"},"end_date":{"$ref":"#/components/schemas/typeDate"},"max_occurrences":{"type":"integer","format":"int32","description":"Number of occurrences when end_type is SCHEDULE_END_TYPE_AFTER_OCCURRENCES.\nSchedule stops after this many executions."}},"description":"ScheduleEnd defines when the schedule stops running.","required":["end_type"]},"v1ScheduleEndType":{"type":"string","enum":["SCHEDULE_END_TYPE_UNSPECIFIED","SCHEDULE_END_TYPE_NEVER","SCHEDULE_END_TYPE_ON_DATE","SCHEDULE_END_TYPE_AFTER_OCCURRENCES"],"default":"SCHEDULE_END_TYPE_UNSPECIFIED","description":"ScheduleEndType defines how a schedule terminates.\n\n - SCHEDULE_END_TYPE_UNSPECIFIED: Unspecified end type. Defaults to NEVER.\n - SCHEDULE_END_TYPE_NEVER: Schedule runs indefinitely (never ends).\n - SCHEDULE_END_TYPE_ON_DATE: Schedule ends on a specific date.\n - SCHEDULE_END_TYPE_AFTER_OCCURRENCES: Schedule ends after a specific number of occurrences."},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"EnableAutomationScheduleBody":{"type":"object","description":"EnableAutomationScheduleRequest is the request to enable a previously disabled schedule."}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}:enableAutomationSchedule":{"post":{"summary":"Enable Automation Schedule","operationId":"EnableAutomationSchedule","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1EnableAutomationScheduleResponse"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnableAutomationScheduleBody"}}},"required":true},"tags":["Automations"]}}}}
```

## Delete Workspace Connection

> This API validates that the connection is not in use by any published\
> automations before deletion. If only draft automations use the connection,\
> deletion proceeds and returns the list of affected automations.\
> \
> The affected draft automations will have unresolved connection references\
> after deletion. They can still be edited but cannot be published until\
> new connections are configured.\
> \
> Errors:\
> \- FAILED\_PRECONDITION: Connection is in use by one or more published automations.\
> &#x20; The error details include DeleteConnectionBlockedError with blocking automations.\
> \- NOT\_FOUND: Connection not found in the workspace.\
> \- INTERNAL: Failed to communicate with the connection storage service.

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1DeleteWorkspaceConnectionResponse":{"type":"object","properties":{"affected_automations":{"type":"array","items":{"$ref":"#/components/schemas/v1AffectedAutomation"},"description":"List of draft automations that were affected by the deletion.\nThese automations have connection references that are now unresolved.\nEmpty if no draft automations were using the connection.","readOnly":true}},"description":"DeleteWorkspaceConnectionResponse returns information about affected automations."},"v1AffectedAutomation":{"type":"object","properties":{"automation_id":{"type":"string","description":"The automation ID (the {automation} segment of the resource name).","readOnly":true},"display_name":{"type":"string","description":"The human-readable display name of the automation.","readOnly":true}},"description":"AffectedAutomation describes a draft automation affected by connection deletion."},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations:deleteConnection":{"delete":{"summary":"Delete Workspace Connection","description":"This API validates that the connection is not in use by any published\nautomations before deletion. If only draft automations use the connection,\ndeletion proceeds and returns the list of affected automations.\n\nThe affected draft automations will have unresolved connection references\nafter deletion. They can still be edited but cannot be published until\nnew connections are configured.\n\nErrors:\n- FAILED_PRECONDITION: Connection is in use by one or more published automations.\n  The error details include DeleteConnectionBlockedError with blocking automations.\n- NOT_FOUND: Connection not found in the workspace.\n- INTERNAL: Failed to communicate with the connection storage service.","operationId":"DeleteWorkspaceConnection","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1DeleteWorkspaceConnectionResponse"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"connection_id","description":"The connection ID to delete.","in":"query","required":true,"schema":{"type":"string"}}],"tags":["Automations"]}}}}
```

## GET /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations/{automation\_id}/triggers

> List Automation Triggers

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1ListAutomationTriggersResponse":{"type":"object","properties":{"automation_triggers":{"type":"array","items":{"$ref":"#/components/schemas/v1AutomationTrigger"},"description":"List of triggers that are active for the specified automation."},"next_page_token":{"type":"string","description":"A token that can be sent as `page_token` to retrieve the next page.\nIf this field is omitted, there are no subsequent pages."}},"description":"Response containing the list of active triggers for an automation."},"v1AutomationTrigger":{"type":"object","properties":{"trigger_id":{"type":"string","description":"The external trigger ID created by another service.\nThis ID uniquely identifies the trigger in the external system."},"automation":{"type":"string","title":"Reference to the automation to be triggered.\nFormat: organizations/{organization}/workspaces/{workspace}/automations/{automation}","readOnly":true},"input_mapping":{"type":"object","additionalProperties":{"type":"string"},"description":"Input mapping for the automation execution.\nKeys are input parameter names, values are the corresponding values to pass."},"phase_type":{"$ref":"#/components/schemas/v1PhaseType"},"phase_sub_type":{"$ref":"#/components/schemas/v1PhaseSubType"},"is_active":{"type":"boolean","description":"Whether this trigger is currently active."}},"description":"AutomationTrigger represents phase configuration metadata for an external trigger.\nThe trigger itself is created and managed by another service; this message\nstores additional metadata about how the trigger relates to automation phases.","required":["trigger_id","phase_type"]},"v1PhaseType":{"type":"string","enum":["PHASE_TYPE_UNSPECIFIED","PHASE_TYPE_PRE","PHASE_TYPE_MAIN","PHASE_TYPE_POST"],"default":"PHASE_TYPE_UNSPECIFIED","description":"PhaseType defines the type of phase for an automation trigger.\n\n - PHASE_TYPE_UNSPECIFIED: Unspecified phase type.\n - PHASE_TYPE_PRE: Pre-processing phase.\n - PHASE_TYPE_MAIN: Main processing phase.\n - PHASE_TYPE_POST: Post-processing phase."},"v1PhaseSubType":{"type":"string","enum":["PHASE_SUB_TYPE_UNSPECIFIED","PHASE_SUB_TYPE_EMAIL","PHASE_SUB_TYPE_SCHEDULE","PHASE_SUB_TYPE_WEBHOOK","PHASE_SUB_TYPE_API"],"default":"PHASE_SUB_TYPE_UNSPECIFIED","description":"PhaseSubType defines the sub-type within a phase for an automation trigger.\n\n - PHASE_SUB_TYPE_UNSPECIFIED: Unspecified phase sub-type.\n - PHASE_SUB_TYPE_EMAIL: Email trigger sub-type.\n - PHASE_SUB_TYPE_SCHEDULE: Schedule-based trigger sub-type.\n - PHASE_SUB_TYPE_WEBHOOK: Webhook trigger sub-type.\n - PHASE_SUB_TYPE_API: API trigger sub-type."},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}/triggers":{"get":{"summary":"List Automation Triggers","operationId":"ListAutomationTriggers","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1ListAutomationTriggersResponse"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"page_size","description":"The maximum number of triggers to return in a single response.\nThe service may return fewer than this value.\nIf unspecified, a default page size will be used.","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"page_token","description":"A page token received from a previous `ListAutomationTriggers` call.\nProvide this to retrieve the subsequent page of results.","in":"query","required":false,"schema":{"type":"string"}},{"name":"filter","description":"A filter expression to apply to the list of triggers.","in":"query","required":false,"schema":{"type":"string"}}],"tags":["Automations"]}}}}
```

## POST /api/v1/organizations/{organization\_id}/workspaces/{workspace\_id}/automations/{automation\_id}/triggers

> Create Automation Trigger

```json
{"openapi":"3.0.0","info":{"title":"Kognitos API","version":"1.0.0"},"tags":[{"name":"Automations","description":"Create and configure automations, revisions, schedules, triggers, and connections."}],"servers":[{"url":"https://app.us-1.kognitos.com"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token."}},"schemas":{"v1AutomationTrigger":{"type":"object","properties":{"trigger_id":{"type":"string","description":"The external trigger ID created by another service.\nThis ID uniquely identifies the trigger in the external system."},"automation":{"type":"string","title":"Reference to the automation to be triggered.\nFormat: organizations/{organization}/workspaces/{workspace}/automations/{automation}","readOnly":true},"input_mapping":{"type":"object","additionalProperties":{"type":"string"},"description":"Input mapping for the automation execution.\nKeys are input parameter names, values are the corresponding values to pass."},"phase_type":{"$ref":"#/components/schemas/v1PhaseType"},"phase_sub_type":{"$ref":"#/components/schemas/v1PhaseSubType"},"is_active":{"type":"boolean","description":"Whether this trigger is currently active."}},"description":"AutomationTrigger represents phase configuration metadata for an external trigger.\nThe trigger itself is created and managed by another service; this message\nstores additional metadata about how the trigger relates to automation phases.","required":["trigger_id","phase_type"]},"v1PhaseType":{"type":"string","enum":["PHASE_TYPE_UNSPECIFIED","PHASE_TYPE_PRE","PHASE_TYPE_MAIN","PHASE_TYPE_POST"],"default":"PHASE_TYPE_UNSPECIFIED","description":"PhaseType defines the type of phase for an automation trigger.\n\n - PHASE_TYPE_UNSPECIFIED: Unspecified phase type.\n - PHASE_TYPE_PRE: Pre-processing phase.\n - PHASE_TYPE_MAIN: Main processing phase.\n - PHASE_TYPE_POST: Post-processing phase."},"v1PhaseSubType":{"type":"string","enum":["PHASE_SUB_TYPE_UNSPECIFIED","PHASE_SUB_TYPE_EMAIL","PHASE_SUB_TYPE_SCHEDULE","PHASE_SUB_TYPE_WEBHOOK","PHASE_SUB_TYPE_API"],"default":"PHASE_SUB_TYPE_UNSPECIFIED","description":"PhaseSubType defines the sub-type within a phase for an automation trigger.\n\n - PHASE_SUB_TYPE_UNSPECIFIED: Unspecified phase sub-type.\n - PHASE_SUB_TYPE_EMAIL: Email trigger sub-type.\n - PHASE_SUB_TYPE_SCHEDULE: Schedule-based trigger sub-type.\n - PHASE_SUB_TYPE_WEBHOOK: Webhook trigger sub-type.\n - PHASE_SUB_TYPE_API: API trigger sub-type."},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}}}},"paths":{"/api/v1/organizations/{organization_id}/workspaces/{workspace_id}/automations/{automation_id}/triggers":{"post":{"summary":"Create Automation Trigger","operationId":"CreateAutomationTrigger","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1AutomationTrigger"}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"parameters":[{"name":"organization_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1AutomationTrigger"}}},"description":"The trigger phase configuration to store.","required":true},"tags":["Automations"]}}}}
```
