Skip to content

Conversation

@sivanel97
Copy link
Contributor

@sivanel97 sivanel97 commented Oct 22, 2025

User description

Description

Update apiSpec to the latest prod version + add descriptions for limitations that didn't show for example relations identifier, etc.

These are the limitations:

Blueprint 30
Entity 1000
Property 100
Relation 100
Scorecard 100
Scorecard rule 100


PR Type

Documentation, Enhancement


Description

  • Updated API specifications to the latest production version with comprehensive documentation of identifier constraints and limitations

  • Added character length constraints (<= 100 characters) and pattern validation (^[A-Za-z0-9@_=\\-]+$) documentation for property identifiers, calculation properties, mirror properties, aggregation properties, and relations across multiple API endpoints

  • Enhanced descriptions with improved formatting and multi-line clarity for better readability in API documentation

  • Added new announcement object property to organization settings schema with configuration options for enabled, content (max 300 chars), link (max 300 chars), and color (blue or red enum)

  • Improved audit logs API parameter documentation with reorganized resources parameter descriptions

  • Updated Scorecards demo tab navigation reference


Diagram Walkthrough

flowchart LR
  apiSpec["API Specification<br/>Latest Prod Version"]
  constraints["Identifier Constraints<br/>Documentation"]
  announcement["Announcement<br/>Configuration"]
  auditLogs["Audit Logs<br/>Parameter Docs"]
  apiSpec -- "Add constraints<br/>& limitations" --> constraints
  apiSpec -- "Add new property" --> announcement
  apiSpec -- "Improve clarity" --> auditLogs
Loading

File Walkthrough

Relevant files
Documentation
4 files
change-a-blueprint.api.mdx
Enhanced API spec with property identifier constraints     

docs/api-reference/change-a-blueprint.api.mdx

  • Updated API specification with enhanced descriptions for blueprint
    schema properties
  • Added character length and pattern constraints documentation for
    property identifiers
  • Clarified limitations for calculation properties, mirror properties,
    aggregation properties, and relations (each <= 100 characters)
  • Improved descriptions with multi-line formatting for better
    readability
+3/-3     
get-audit-logs.api.mdx
Improved audit logs API parameter documentation                   

docs/api-reference/get-audit-logs.api.mdx

  • Updated API specification with improved parameter descriptions
  • Reorganized resources parameter description to clarify possible values
    upfront
  • Enhanced formatting and clarity of audit log query parameters
+2/-2     
create-a-blueprint.api.mdx
Enhanced API spec with identifier constraints documentation

docs/api-reference/create-a-blueprint.api.mdx

  • Updated API specification with enhanced descriptions for blueprint
    schema properties
  • Added character length and pattern constraints documentation for
    property, calculation property, mirror property, aggregation property,
    and relation identifiers
  • Added line breaks and formatting to improve readability of complex
    schema descriptions
  • Updated descriptions to clarify that each identifier can be <= 100
    characters long and must match pattern ^[A-Za-z0-9@_=\\-]+$
+3/-3     
update-a-blueprint.api.mdx
API Spec Update with Enhanced Field Limitations Documentation

docs/api-reference/update-a-blueprint.api.mdx

  • Updated the API specification to the latest production version with
    improved schema encoding
  • Added descriptive limitations documentation for calculationProperties,
    mirrorProperties, aggregationProperties, and relations fields
  • Enhanced descriptions to clarify that each identifier can be <= 100
    characters long and must match the pattern ^[A-Za-z0-9@_=\\-]+$
  • Added multi-line formatting to descriptions for better readability in
    the API documentation
+3/-3     
Miscellaneous
1 files
ProductPillars.tsx
Updated Scorecards demo tab navigation                                     

src/components/ProductPillars/ProductPillars.tsx

  • Updated activeTab parameter from 1 to 2 in the Scorecards demo URL
  • Changed the demo link to point to a different tab view for the
    authentication service entity
+1/-1     
Enhancement
1 files
update-organization-details.api.mdx
Add announcement configuration to organization settings   

docs/api-reference/update-organization-details.api.mdx

  • Added new announcement object property to the organization settings
    schema
  • Includes enabled boolean flag, content string (max 300 chars, min 1
    char), link field (string or null, max 300 chars), and color enum
    (blue or red)
  • Updated API specification to support organization-wide announcement
    configuration
+2/-2     
Additional files
6 files
get-a-blueprint.api.mdx +2/-2     
get-all-blueprints.api.mdx +2/-2     
rename-a-blueprints-mirror-property.api.mdx +2/-2     
rename-a-blueprints-relation.api.mdx +2/-2     
rename-a-property-in-a-blueprint.api.mdx +2/-2     
apispec.yaml +175/-76

@qodo-merge-pro
Copy link
Contributor

qodo-merge-pro bot commented Oct 22, 2025

PR Compliance Guide 🔍

Below is a summary of compliance checks for this PR:

Security Compliance
🟢
No security concerns identified No security vulnerabilities detected by AI analysis. Human verification advised for critical code.
Ticket Compliance
🎫 No ticket provided
- [ ] Create ticket/issue <!-- /create_ticket --create_ticket=true -->

</details></td></tr>
Codebase Duplication Compliance
Codebase context is not defined

Follow the guide to enable codebase context checks.

Custom Compliance
No custom compliance provided

Follow the guide to enable custom compliance check.

  • Update
Compliance status legend 🟢 - Fully Compliant
🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label

@qodo-merge-pro
Copy link
Contributor

qodo-merge-pro bot commented Oct 22, 2025

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
High-level
Automate API specification updates

The manual process of updating Base64-encoded API specifications in multiple
files is error-prone. Automate this by generating the specification files from a
single source of truth to improve accuracy and maintainability.

Examples:

docs/api-reference/update-a-blueprint.api.mdx [8-57]
api: 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
sidebar_class_name: "patch api-method"
info_path: api-reference/port-api
custom_edit_url: null
---

import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
import ParamsDetails from "@theme/ParamsDetails";
import RequestSchema from "@theme/RequestSchema";
import StatusCodes from "@theme/StatusCodes";

 ... (clipped 40 lines)
docs/api-reference/create-a-blueprint.api.mdx [8-57]
api: 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
sidebar_class_name: "post api-method"
info_path: api-reference/port-api
custom_edit_url: null
---

import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
import ParamsDetails from "@theme/ParamsDetails";
import RequestSchema from "@theme/RequestSchema";
import StatusCodes from "@theme/StatusCodes";

 ... (clipped 40 lines)

Solution Walkthrough:

Before:

// In docs/api-reference/create-a-blueprint.api.mdx
api: <manually_updated_base64_string_1>
<RequestSchema
  body={{
    // ...
    "description": "Manually updated description for create blueprint"
    // ...
  }}
/>

// In docs/api-reference/update-a-blueprint.api.mdx
api: <manually_updated_base64_string_2>
<RequestSchema
  body={{
    // ...
    "description": "Manually updated description for update blueprint"
    // ...
  }}
/>

After:

// In a single source of truth, e.g., 'api-spec.json'
{
  "paths": {
    "/blueprints": {
      "post": { "summary": "Create blueprint", ... },
      "patch": { "summary": "Update blueprint", ... }
    }
  },
  "components": {
    "schemas": {
      // ... shared schema definitions
    }
  }
}

// Build script, e.g., 'generate-docs.js'
const spec = readJson('api-spec.json');
generateMdxFile('create-a-blueprint.api.mdx', spec.paths['/blueprints'].post);
generateMdxFile('update-a-blueprint.api.mdx', spec.paths['/blueprints'].patch);
Suggestion importance[1-10]: 9

__

Why: The suggestion correctly identifies a critical maintainability issue with manually updating API specifications across multiple files and proposes a robust automation solution that would significantly improve accuracy and efficiency.

High
Possible issue
Fix broken markdown link in description
Suggestion Impact:The commit updated the markdown links by removing the newline within the link text, changing "[calculation\nproperties]" to "[calculation properties]" and "[mirror\nproperties]" to "[mirror properties]". The aggregationProperties link text was already without a newline but kept consistent.

code diff:

-  body={{"content":{"application/json":{"schema":{"type":"object","properties":{"identifier":{"type":"string","pattern":"^(?!\\.{1,2}$)[\\p{L}0-9@_.+:\\\\/-]+$","maxLength":30,"description":"The identifier of the blueprint."},"title":{"type":"string","maxLength":30,"minLength":1,"description":"The title of the blueprint."},"description":{"type":"string","maxLength":200,"description":"The description of the blueprint."},"icon":{"type":"string","description":"The icon of the blueprint."},"teamInheritance":{"type":"object","description":"A relation to another blueprint from which to inherit the team. Can be any blueprint connected to this one via any number of relations. `path` is the path to the desired blueprint via relations, for example: `\"relationIdentifier.relationIdentifierInRelatedBlueprint\"`","properties":{"path":{"type":"string","description":"The path to the desired blueprint via relations."}},"additionalProperties":false,"required":["path"]},"ownership":{"anyOf":[{"type":"object","title":"Inherited","description":"Ownership of the blueprint's entities will be inherited from a different related blueprint with `Direct` ownership.","properties":{"type":{"type":"string","enum":["Inherited"]},"path":{"type":"string","description":"The `path` key is a dot-separated path of relation identifiers that lead to the desired blueprint."},"title":{"type":"string","description":"The title of the ownership property. The default value is `Owning teams`."}},"additionalProperties":false,"required":["type","path"]},{"type":"object","title":"Direct","description":"Ownership of the blueprint's entities will be defined by a hidden **relation** to the `Team` blueprint.","properties":{"type":{"type":"string","enum":["Direct"]},"title":{"type":"string","description":"The title of the ownership property. The default value is `Owning teams`."}},"additionalProperties":false,"required":["type"]}]},"schema":{"type":"object","description":"The schema of the blueprint, see `properties` and `required` below for more information.","properties":{"properties":{"type":"object","description":"The properties of the blueprint.\nEach property identifier can be `<= 100 characters` long, values must match the following pattern: `^[A-Za-z0-9@_=\\\\-]+$`.\n","propertyNames":{"pattern":"^[A-Za-z0-9@_=\\\\-]+$","maxLength":100},"additionalProperties":{"type":"object","properties":{"title":{"type":"string","description":"The title of the property."},"description":{"type":"string","description":"The description of the property."},"icon":{"type":"string","description":"The icon of the property."},"type":{"enum":["string","number","boolean","object","array"],"description":"The [type](https://docs.port.io/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/#supported-properties) of the property."},"format":{"enum":["date-time","url","email","idn-email","ipv4","ipv6","markdown","yaml","user","blueprints","team","timer","proto"],"description":"The type's [format](https://docs.port.io/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/#supported-properties)."},"spec":{"enum":["open-api","embedded-url","async-api"],"description":"The [spec](https://docs.port.io/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/#supported-properties) of the property."},"specAuthentication":{"type":"object","description":"When using the `spec` property with `embedded-url`, the authentication spec of the property.","properties":{"clientId":{"type":"string"},"authorizationUrl":{"type":"string","format":"url"},"tokenUrl":{"type":"string","format":"url"},"authorizationScope":{"type":"array","items":{"type":"string"},"default":["openid"]}},"additionalProperties":false,"required":["clientId","authorizationUrl","tokenUrl"]}},"required":["type"]}},"required":{"type":"array","items":{"type":"string"},"description":"The required properties of the blueprint, these must be provided when creating an entity based on this blueprint. This is an array of the required properties' identifiers."}},"additionalProperties":false,"required":["properties"]},"calculationProperties":{"type":"object","description":"The [calculation\nproperties](${DOCS_URL}/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/calculation-property/)\nof the blueprint.\nEach calculation property identifier can be `<= 100 characters` long, values must match the following pattern: `^[A-Za-z0-9@_=\\\\-]+$`.\n","default":{},"propertyNames":{"pattern":"^[A-Za-z0-9@_=\\\\-]+$","maxLength":100},"additionalProperties":{"type":"object","additionalProperties":false,"properties":{"title":{"type":"string","description":"The title of the property."},"description":{"type":"string","description":"The description of the property."},"icon":{"type":"string","description":"The icon of the property."},"calculation":{"type":"string","description":"The JQ expression that calculates the value of the property."},"type":{"enum":["string","number","boolean","object","array"],"description":"The type of the property."},"format":{"enum":["date-time","url","email","idn-email","ipv4","ipv6","markdown","yaml","user","team","proto"],"description":"The format of the property."},"spec":{"enum":["open-api","embedded-url","async-api"],"description":"The spec of the property."},"specAuthentication":{"type":"object","description":"When using the `spec` property with `embedded-url`, the authentication spec of the property.","properties":{"clientId":{"type":"string"},"authorizationUrl":{"type":"string","format":"url"},"tokenUrl":{"type":"string","format":"url"},"authorizationScope":{"type":"array","items":{"type":"string"},"default":["openid"]}},"additionalProperties":false,"required":["clientId","authorizationUrl","tokenUrl"]},"colorized":{"type":"boolean","description":"Whether the property is colorized."},"colors":{"type":"object","description":"When using the `colorized` property, the colors of the property.","additionalProperties":{"enum":["blue","turquoise","orange","purple","pink","yellow","green","red","gold","silver","paleBlue","darkGray","lightGray","bronze","lime","olive","brown"]}},"items":{"type":"object","properties":{"type":{"enum":["string","number","boolean","object","array"],"description":"The type of the item."},"format":{"description":"The format of the item.","enum":["date-time","url","email","idn-format","ipv4","ipv6","markdown","yaml","user","team","timer","proto"]}}}},"required":["calculation","type"]}},"mirrorProperties":{"type":"object","description":"The [mirror\nproperties](${DOCS_URL}/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/mirror-property/)\nof the blueprint.\nEach mirror property identifier can be `<= 100 characters` long, values must match the following pattern: `^[A-Za-z0-9@_=\\\\-]+$`.\n","propertyNames":{"pattern":"^[A-Za-z0-9@_=\\\\-]+$","maxLength":100},"additionalProperties":{"type":"object","properties":{"path":{"type":"string","pattern":"^(?:[A-Za-z0-9@_=\\-$]+\\.)+?(\\w|\\$|@|-)*?[^\\.]+$","description":"The path to the property in the related blueprint. This is a string of relation identifiers separated by dots, the last identifier is the property identifier."},"title":{"type":"string","description":"The title of the property."}},"additionalProperties":false,"required":["path"]}},"aggregationProperties":{"type":"object","description":"The [aggregation properties](${DOCS_URL}/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/aggregation-property/)\nof the blueprint.\nEach aggregation property identifier can be `<= 100 characters` long, values must match the following pattern: `^[A-Za-z0-9@_=\\\\-]+$`.\n","default":{},"propertyNames":{"pattern":"^[A-Za-z0-9@_=\\\\-]+$","maxLength":100},"additionalProperties":{"type":"object","properties":{"title":{"type":"string","description":"The title of the property."},"description":{"type":"string","description":"The description of the property."},"icon":{"type":"string","description":"The icon of the property."},"type":{"enum":["number"],"default":"number","description":"The type of the property. This is the type of the aggregation result."},"target":{"type":"string","description":"The blueprint identifier to run the aggregation on."},"calculationSpec":{"type":"object","oneOf":[{"oneOf":[{"type":"object","properties":{"func":{"description":"The function to use for the aggregation.","enum":["count"]},"calculationBy":{"type":"string","description":"Whether to aggregate by entities or properties.","enum":["entities"]}},"required":["func","calculationBy"],"additionalProperties":false},{"type":"object","properties":{"func":{"description":"The function to use for the aggregation.","enum":["average"]},"measureTimeBy":{"type":"string","description":"The time property to use for the aggregation."},"averageOf":{"type":"string","enum":["hour","day","week","month","total"]},"calculationBy":{"type":"string","description":"Whether to aggregate by entities or properties.","enum":["entities"]}},"required":["func","calculationBy","averageOf"],"additionalProperties":false}]},{"oneOf":[{"type":"object","properties":{"func":{"type":"string","enum":["sum","min","max","median"],"description":"The function to use for the aggregation."},"property":{"type":"string","description":"The property to aggregate."},"calculationBy":{"type":"string","description":"Whether to aggregate by property or entities.","enum":["property"]}},"additionalProperties":false,"required":["func","property","calculationBy"]},{"type":"object","properties":{"func":{"description":"The function to use for the aggregation.","enum":["average"]},"measureTimeBy":{"type":"string","description":"The time property to use for the aggregation."},"averageOf":{"type":"string","enum":["hour","day","week","month","total"]},"property":{"type":"string","description":"The property to aggregate."},"calculationBy":{"type":"string","description":"Whether to aggregate by property or entities.","enum":["property"]}},"additionalProperties":false,"required":["func","property","calculationBy","averageOf"]}]}],"description":"The calculation spec of the property."},"query":{"type":"object","properties":{"combinator":{"enum":["and","or"],"description":"The combinator to use for the rules."},"rules":{"type":"array","items":{"anyOf":[{"type":"object","title":"Date Rule","properties":{"property":{"oneOf":[{"type":"string"},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]},"operator":{"enum":["between","notBetween","="]},"value":{"type":"object","oneOf":[{"type":"object","title":"Date Range","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}},"required":["from","to"]},{"type":"object","title":"Date Preset","properties":{"preset":{"type":"string","enum":["today","tomorrow","yesterday","lastDay","lastWeek","last2Weeks","lastMonth","last3Months","last6Months","last12Months"]}},"required":["preset"]},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]}},"required":["property","operator","value"],"additionalProperties":false},{"type":"object","title":"Empty Rule","oneOf":[{"type":"object","title":"Empty Rule","properties":{"operator":{"enum":["isEmpty","isNotEmpty"]},"property":{"type":"string"}},"required":["operator","property"],"additionalProperties":false}]},{"type":"object","title":"Number Rule","properties":{"property":{"oneOf":[{"type":"string"},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]},"operator":{"enum":[">",">=","<","<="]},"value":{"anyOf":[{"type":"number","title":"number"},{"type":"string","format":"date-time","title":"date-time"},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]}},"required":["property","operator","value"],"additionalProperties":false},{"type":"object","title":"Expired Rule","oneOf":[{"type":"object","title":"Expired Rule","properties":{"operator":{"enum":["isExpired","isNotExpired"]},"property":{"type":"string"}},"required":["operator","property"],"additionalProperties":false}]},{"type":"object","title":"String Rule","oneOf":[{"type":"object","title":"String Rule","properties":{"property":{"oneOf":[{"type":"string"},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]},"operator":{"enum":["=","!=","containsAny","contains","doesNotContains","beginsWith","doesNotBeginsWith","endsWith","doesNotEndsWith","in","notIn"]},"value":{"anyOf":[{"type":"null","title":"null"},{"type":"string","title":"string"},{"type":"number","title":"number"},{"type":"boolean","title":"boolean"},{"type":"string","format":"date-time","title":"date-time"},{"type":"array","items":{"type":"string"},"title":"array"},{"type":"array","items":{"type":"number"},"title":"array"},{"type":"array","items":{"type":"boolean"},"title":"array"},{"type":"array","items":{"type":"string","format":"date-time"},"title":"array"},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]}},"additionalProperties":false,"required":["property","operator","value"]}]},{"type":"object","title":"Relation Rule","properties":{"operator":{"enum":["relatedTo"]},"blueprint":{"type":"string"},"value":{"anyOf":[{"type":"string","title":"string"},{"type":"array","items":{"type":"string"},"title":"array"}]},"direction":{"enum":["upstream","downstream"]},"required":{"type":"boolean"}},"additionalProperties":false,"required":["operator","value","blueprint"]},{"type":"object","title":"Property schema rule","properties":{"propertySchema":{"type":"object","properties":{"type":{"type":"string"},"format":{"type":"string"},"items":{"type":"object","properties":{"type":{"type":"string"},"format":{"type":"string"}},"required":["type"]}},"required":["type"],"additionalProperties":false},"operator":{"enum":["=","!=","contains"]},"value":{"anyOf":[{"type":"null","title":"null"},{"type":"string","title":"string"},{"type":"number","title":"number"},{"type":"boolean","title":"boolean"}]}},"required":["operator","propertySchema"],"additionalProperties":false},{"type":"object","anyOf":[{"type":"object","properties":{"property":{"type":"object","properties":{"path":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"object","properties":{"relation":{"type":"string"},"maxHops":{"type":"number","minimum":1,"maximum":15}}}]}},"fromBlueprint":{"type":"string"}},"required":["path"],"additionalProperties":false},"operator":{"type":"string","enum":["matchAny"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["property","operator","value"],"additionalProperties":false}]},"circular(/schemas/entitiesQuery)"]}}},"required":["combinator","rules"],"additionalProperties":false,"example":{"combinator":"and","rules":[{"property":"$blueprint","operator":"=","value":"service"},{"combinator":"or","rules":[{"property":"environment","operator":"=","value":"production"},{"property":"environment","operator":"=","value":"staging"}]}]},"title":"/schemas/entitiesQuery"},"pathFilter":{"type":"array","description":"Optional filter to run the aggregation on entities that are connected through a specific path. When empty will use all the related entities from all possible paths","maxItems":1,"items":{"type":"object","properties":{"path":{"description":"The path to the property in the related blueprint. This is a string of relation identifiers separated by dots.","type":"array","items":{"type":"string"},"minItems":1},"fromBlueprint":{"type":"string"}},"required":["path"],"additionalProperties":false}}},"additionalProperties":false,"required":["title","target","calculationSpec"]}},"relations":{"type":"object","description":"The [relations](${DOCS_URL}/build-your-software-catalog/customize-integrations/configure-data-model/relate-blueprints/)\nof the blueprint.\nEach relation identifier can be `<= 100 characters` long, values must match the following pattern: `^[A-Za-z0-9@_=\\\\-]+$`.\n","propertyNames":{"pattern":"^[A-Za-z0-9@_=\\\\-]+$","maxLength":100},"additionalProperties":{"type":"object","properties":{"title":{"type":"string"},"target":{"type":"string"},"required":{"type":"boolean","default":false},"many":{"type":"boolean","default":false},"description":{"type":"string"},"type":{"type":"string"}},"additionalProperties":false,"required":["target","required","many"]}},"changelogDestination":{"description":"The destination of the blueprint's changelog.","oneOf":[{"type":"object","title":"Webhook","description":"The changelog will be sent to the specified webhook.","properties":{"type":{"type":"string","enum":["WEBHOOK"]},"agent":{"type":"boolean","description":"If `true`, Port's execution agent will be used to send the changelog."},"url":{"type":"string","description":"The URL of the webhook.","format":"uri"}},"required":["url","type"],"additionalProperties":false},{"type":"object","title":"Kafka","description":"The changelog will be sent to the Kafka topic connected to your Port account.","properties":{"type":{"type":"string","enum":["KAFKA"]}},"required":["type"],"additionalProperties":false}]}},"additionalProperties":true,"required":["identifier","title","schema"]}}},"required":true}}
+  body={{"content":{"application/json":{"schema":{"type":"object","properties":{"identifier":{"type":"string","pattern":"^(?!\\.{1,2}$)[\\p{L}0-9@_.+:\\\\/-]+$","maxLength":30,"description":"The identifier of the blueprint."},"title":{"type":"string","maxLength":30,"minLength":1,"description":"The title of the blueprint."},"description":{"type":"string","maxLength":200,"description":"The description of the blueprint."},"icon":{"type":"string","description":"The icon of the blueprint."},"teamInheritance":{"type":"object","description":"A relation to another blueprint from which to inherit the team. Can be any blueprint connected to this one via any number of relations. `path` is the path to the desired blueprint via relations, for example: `\"relationIdentifier.relationIdentifierInRelatedBlueprint\"`","properties":{"path":{"type":"string","description":"The path to the desired blueprint via relations."}},"additionalProperties":false,"required":["path"]},"ownership":{"anyOf":[{"type":"object","title":"Inherited","description":"Ownership of the blueprint's entities will be inherited from a different related blueprint with `Direct` ownership.","properties":{"type":{"type":"string","enum":["Inherited"]},"path":{"type":"string","description":"The `path` key is a dot-separated path of relation identifiers that lead to the desired blueprint."},"title":{"type":"string","description":"The title of the ownership property. The default value is `Owning teams`."}},"additionalProperties":false,"required":["type","path"]},{"type":"object","title":"Direct","description":"Ownership of the blueprint's entities will be defined by a hidden **relation** to the `Team` blueprint.","properties":{"type":{"type":"string","enum":["Direct"]},"title":{"type":"string","description":"The title of the ownership property. The default value is `Owning teams`."}},"additionalProperties":false,"required":["type"]}]},"schema":{"type":"object","description":"The schema of the blueprint, see `properties` and `required` below for more information.","properties":{"properties":{"type":"object","description":"The properties of the blueprint.\nEach property identifier can be `<= 100 characters` long, values must match the following pattern: `^[A-Za-z0-9@_=\\\\-]+$`.\n","propertyNames":{"pattern":"^[A-Za-z0-9@_=\\\\-]+$","maxLength":100},"additionalProperties":{"type":"object","properties":{"title":{"type":"string","description":"The title of the property."},"description":{"type":"string","description":"The description of the property."},"icon":{"type":"string","description":"The icon of the property."},"type":{"enum":["string","number","boolean","object","array"],"description":"The [type](https://docs.port.io/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/#supported-properties) of the property."},"format":{"enum":["date-time","url","email","idn-email","ipv4","ipv6","markdown","yaml","user","blueprints","team","timer","proto"],"description":"The type's [format](https://docs.port.io/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/#supported-properties)."},"spec":{"enum":["open-api","embedded-url","async-api"],"description":"The [spec](https://docs.port.io/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/#supported-properties) of the property."},"specAuthentication":{"type":"object","description":"When using the `spec` property with `embedded-url`, the authentication spec of the property.","properties":{"clientId":{"type":"string"},"authorizationUrl":{"type":"string","format":"url"},"tokenUrl":{"type":"string","format":"url"},"authorizationScope":{"type":"array","items":{"type":"string"},"default":["openid"]}},"additionalProperties":false,"required":["clientId","authorizationUrl","tokenUrl"]}},"required":["type"]}},"required":{"type":"array","items":{"type":"string"},"description":"The required properties of the blueprint, these must be provided when creating an entity based on this blueprint. This is an array of the required properties' identifiers."}},"additionalProperties":false,"required":["properties"]},"calculationProperties":{"type":"object","description":"The [calculation properties](${DOCS_URL}/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/calculation-property/)\nof the blueprint.\nEach calculation property identifier can be `<= 100 characters` long, values must match the following pattern: `^[A-Za-z0-9@_=\\\\-]+$`.\n","default":{},"propertyNames":{"pattern":"^[A-Za-z0-9@_=\\\\-]+$","maxLength":100},"additionalProperties":{"type":"object","additionalProperties":false,"properties":{"title":{"type":"string","description":"The title of the property."},"description":{"type":"string","description":"The description of the property."},"icon":{"type":"string","description":"The icon of the property."},"calculation":{"type":"string","description":"The JQ expression that calculates the value of the property."},"type":{"enum":["string","number","boolean","object","array"],"description":"The type of the property."},"format":{"enum":["date-time","url","email","idn-email","ipv4","ipv6","markdown","yaml","user","team","proto"],"description":"The format of the property."},"spec":{"enum":["open-api","embedded-url","async-api"],"description":"The spec of the property."},"specAuthentication":{"type":"object","description":"When using the `spec` property with `embedded-url`, the authentication spec of the property.","properties":{"clientId":{"type":"string"},"authorizationUrl":{"type":"string","format":"url"},"tokenUrl":{"type":"string","format":"url"},"authorizationScope":{"type":"array","items":{"type":"string"},"default":["openid"]}},"additionalProperties":false,"required":["clientId","authorizationUrl","tokenUrl"]},"colorized":{"type":"boolean","description":"Whether the property is colorized."},"colors":{"type":"object","description":"When using the `colorized` property, the colors of the property.","additionalProperties":{"enum":["blue","turquoise","orange","purple","pink","yellow","green","red","gold","silver","paleBlue","darkGray","lightGray","bronze","lime","olive","brown"]}},"items":{"type":"object","properties":{"type":{"enum":["string","number","boolean","object","array"],"description":"The type of the item."},"format":{"description":"The format of the item.","enum":["date-time","url","email","idn-format","ipv4","ipv6","markdown","yaml","user","team","timer","proto"]}}}},"required":["calculation","type"]}},"mirrorProperties":{"type":"object","description":"The [mirror properties](${DOCS_URL}/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/mirror-property/)\nof the blueprint.\nEach mirror property identifier can be `<= 100 characters` long, values must match the following pattern: `^[A-Za-z0-9@_=\\\\-]+$`.\n","propertyNames":{"pattern":"^[A-Za-z0-9@_=\\\\-]+$","maxLength":100},"additionalProperties":{"type":"object","properties":{"path":{"type":"string","pattern":"^(?:[A-Za-z0-9@_=\\-$]+\\.)+?(\\w|\\$|@|-)*?[^\\.]+$","description":"The path to the property in the related blueprint. This is a string of relation identifiers separated by dots, the last identifier is the property identifier."},"title":{"type":"string","description":"The title of the property."}},"additionalProperties":false,"required":["path"]}},"aggregationProperties":{"type":"object","description":"The [aggregation properties](${DOCS_URL}/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/aggregation-property/)\nof the blueprint.\nEach aggregation property identifier can be `<= 100 characters` long, values must match the following pattern: `^[A-Za-z0-9@_=\\\\-]+$`.\n","default":{},"propertyNames":{"pattern":"^[A-Za-z0-9@_=\\\\-]+$","maxLength":100},"additionalProperties":{"type":"object","properties":{"title":{"type":"string","description":"The title of the property."},"description":{"type":"string","description":"The description of the property."},"icon":{"type":"string","description":"The icon of the property."},"type":{"enum":["number"],"default":"number","description":"The type of the property. This is the type of the aggregation result."},"target":{"type":"string","description":"The blueprint identifier to run the aggregation on."},"calculationSpec":{"type":"object","oneOf":[{"oneOf":[{"type":"object","properties":{"func":{"description":"The function to use for the aggregation.","enum":["count"]},"calculationBy":{"type":"string","description":"Whether to aggregate by entities or properties.","enum":["entities"]}},"required":["func","calculationBy"],"additionalProperties":false},{"type":"object","properties":{"func":{"description":"The function to use for the aggregation.","enum":["average"]},"measureTimeBy":{"type":"string","description":"The time property to use for the aggregation."},"averageOf":{"type":"string","enum":["hour","day","week","month","total"]},"calculationBy":{"type":"string","description":"Whether to aggregate by entities or properties.","enum":["entities"]}},"required":["func","calculationBy","averageOf"],"additionalProperties":false}]},{"oneOf":[{"type":"object","properties":{"func":{"type":"string","enum":["sum","min","max","median"],"description":"The function to use for the aggregation."},"property":{"type":"string","description":"The property to aggregate."},"calculationBy":{"type":"string","description":"Whether to aggregate by property or entities.","enum":["property"]}},"additionalProperties":false,"required":["func","property","calculationBy"]},{"type":"object","properties":{"func":{"description":"The function to use for the aggregation.","enum":["average"]},"measureTimeBy":{"type":"string","description":"The time property to use for the aggregation."},"averageOf":{"type":"string","enum":["hour","day","week","month","total"]},"property":{"type":"string","description":"The property to aggregate."},"calculationBy":{"type":"string","description":"Whether to aggregate by property or entities.","enum":["property"]}},"additionalProperties":false,"required":["func","property","calculationBy","averageOf"]}]}],"description":"The calculation spec of the property."},"query":{"type":"object","properties":{"combinator":{"enum":["and","or"],"description":"The combinator to use for the rules."},"rules":{"type":"array","items":{"anyOf":[{"type":"object","title":"Date Rule","properties":{"property":{"oneOf":[{"type":"string"},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]},"operator":{"enum":["between","notBetween","="]},"value":{"type":"object","oneOf":[{"type":"object","title":"Date Range","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}},"required":["from","to"]},{"type":"object","title":"Date Preset","properties":{"preset":{"type":"string","enum":["today","tomorrow","yesterday","lastDay","lastWeek","last2Weeks","lastMonth","last3Months","last6Months","last12Months"]}},"required":["preset"]},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]}},"required":["property","operator","value"],"additionalProperties":false},{"type":"object","title":"Empty Rule","oneOf":[{"type":"object","title":"Empty Rule","properties":{"operator":{"enum":["isEmpty","isNotEmpty"]},"property":{"type":"string"}},"required":["operator","property"],"additionalProperties":false}]},{"type":"object","title":"Number Rule","properties":{"property":{"oneOf":[{"type":"string"},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]},"operator":{"enum":[">",">=","<","<="]},"value":{"anyOf":[{"type":"number","title":"number"},{"type":"string","format":"date-time","title":"date-time"},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]}},"required":["property","operator","value"],"additionalProperties":false},{"type":"object","title":"Expired Rule","oneOf":[{"type":"object","title":"Expired Rule","properties":{"operator":{"enum":["isExpired","isNotExpired"]},"property":{"type":"string"}},"required":["operator","property"],"additionalProperties":false}]},{"type":"object","title":"String Rule","oneOf":[{"type":"object","title":"String Rule","properties":{"property":{"oneOf":[{"type":"string"},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]},"operator":{"enum":["=","!=","containsAny","contains","doesNotContains","beginsWith","doesNotBeginsWith","endsWith","doesNotEndsWith","in","notIn"]},"value":{"anyOf":[{"type":"null","title":"null"},{"type":"string","title":"string"},{"type":"number","title":"number"},{"type":"boolean","title":"boolean"},{"type":"string","format":"date-time","title":"date-time"},{"type":"array","items":{"type":"string"},"title":"array"},{"type":"array","items":{"type":"number"},"title":"array"},{"type":"array","items":{"type":"boolean"},"title":"array"},{"type":"array","items":{"type":"string","format":"date-time"},"title":"array"},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]}},"additionalProperties":false,"required":["property","operator","value"]}]},{"type":"object","title":"Relation Rule","properties":{"operator":{"enum":["relatedTo"]},"blueprint":{"type":"string"},"value":{"anyOf":[{"type":"string","title":"string"},{"type":"array","items":{"type":"string"},"title":"array"}]},"direction":{"enum":["upstream","downstream"]},"required":{"type":"boolean"}},"additionalProperties":false,"required":["operator","value","blueprint"]},{"type":"object","title":"Property schema rule","properties":{"propertySchema":{"type":"object","properties":{"type":{"type":"string"},"format":{"type":"string"},"items":{"type":"object","properties":{"type":{"type":"string"},"format":{"type":"string"}},"required":["type"]}},"required":["type"],"additionalProperties":false},"operator":{"enum":["=","!=","contains"]},"value":{"anyOf":[{"type":"null","title":"null"},{"type":"string","title":"string"},{"type":"number","title":"number"},{"type":"boolean","title":"boolean"}]}},"required":["operator","propertySchema"],"additionalProperties":false},{"type":"object","anyOf":[{"type":"object","properties":{"property":{"type":"object","properties":{"path":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"object","properties":{"relation":{"type":"string"},"maxHops":{"type":"number","minimum":1,"maximum":15}}}]}},"fromBlueprint":{"type":"string"}},"required":["path"],"additionalProperties":false},"operator":{"type":"string","enum":["matchAny"]},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["property","operator","value"],"additionalProperties":false}]},"circular(/schemas/entitiesQuery)"]}}},"required":["combinator","rules"],"additionalProperties":false,"example":{"combinator":"and","rules":[{"property":"$blueprint","operator":"=","value":"service"},{"combinator":"or","rules":[{"property":"environment","operator":"=","value":"production"},{"property":"environment","operator":"=","value":"staging"}]}]},"title":"/schemas/entitiesQuery"},"pathFilter":{"type":"array","description":"Optional filter to run the aggregation on entities that are connected through a specific path. When empty will use all the related entities from all possible paths","maxItems":1,"items":{"type":"object","properties":{"path":{"description":"The path to the property in the related blueprint. This is a string of relation identifiers separated by dots.","type":"array","items":{"type":"string"},"minItems":1},"fromBlueprint":{"type":"string"}},"required":["path"],"additionalProperties":false}}},"additionalProperties":false,"required":["title","target","calculationSpec"]}},"relations":{"type":"object","description":"The [relations](${DOCS_URL}/build-your-software-catalog/customize-integrations/configure-data-model/relate-blueprints/)\nof the blueprint.\nEach relation identifier can be `<= 100 characters` long, values must match the following pattern: `^[A-Za-z0-9@_=\\\\-]+$`.\n","propertyNames":{"pattern":"^[A-Za-z0-9@_=\\\\-]+$","maxLength":100},"additionalProperties":{"type":"object","properties":{"title":{"type":"string"},"target":{"type":"string"},"required":{"type":"boolean","default":false},"many":{"type":"boolean","default":false},"description":{"type":"string"},"type":{"type":"string"}},"additionalProperties":false,"required":["target","required","many"]}},"changelogDestination":{"description":"The destination of the blueprint's changelog.","oneOf":[{"type":"object","title":"Webhook","description":"The changelog will be sent to the specified webhook.","properties":{"type":{"type":"string","enum":["WEBHOOK"]},"agent":{"type":"boolean","description":"If `true`, Port's execution agent will be used to send the changelog."},"url":{"type":"string","description":"The URL of the webhook.","format":"uri"}},"required":["url","type"],"additionalProperties":false},{"type":"object","title":"Kafka","description":"The changelog will be sent to the Kafka topic connected to your Port account.","properties":{"type":{"type":"string","enum":["KAFKA"]}},"required":["type"],"additionalProperties":false}]}},"additionalProperties":true,"required":["identifier","title","schema"]}}},"required":true}}
 >
   
 </RequestSchema>
@@ -62,7 +62,7 @@
 <StatusCodes
   id={undefined}
   label={undefined}
-  responses={{"201":{"description":"Created successfully.","content":{"application/json":{"schema":{"description":"Created successfully.","type":"object","properties":{"ok":{"enum":[true]},"blueprint":{"type":"object","properties":{"identifier":{"type":"string","pattern":"^(?!\\.{1,2}$)[\\p{L}0-9@_.+:\\\\/-]+$","maxLength":30,"description":"The identifier of the blueprint."},"title":{"type":"string","maxLength":30,"minLength":1,"description":"The title of the blueprint."},"description":{"type":"string","maxLength":200,"description":"The description of the blueprint."},"icon":{"type":"string","description":"The icon of the blueprint."},"teamInheritance":{"type":"object","description":"A relation to another blueprint from which to inherit the team. Can be any blueprint connected to this one via any number of relations. `path` is the path to the desired blueprint via relations, for example: `\"relationIdentifier.relationIdentifierInRelatedBlueprint\"`","properties":{"path":{"type":"string","description":"The path to the desired blueprint via relations."}},"additionalProperties":false,"required":["path"]},"ownership":{"anyOf":[{"type":"object","title":"Inherited","description":"Ownership of the blueprint's entities will be inherited from a different related blueprint with `Direct` ownership.","properties":{"type":{"type":"string","enum":["Inherited"]},"path":{"type":"string","description":"The `path` key is a dot-separated path of relation identifiers that lead to the desired blueprint."},"title":{"type":"string","description":"The title of the ownership property. The default value is `Owning teams`."}},"additionalProperties":false,"required":["type","path"]},{"type":"object","title":"Direct","description":"Ownership of the blueprint's entities will be defined by a hidden **relation** to the `Team` blueprint.","properties":{"type":{"type":"string","enum":["Direct"]},"title":{"type":"string","description":"The title of the ownership property. The default value is `Owning teams`."}},"additionalProperties":false,"required":["type"]}]},"schema":{"type":"object","description":"The schema of the blueprint, see `properties` and `required` below for more information.","properties":{"properties":{"type":"object","description":"The properties of the blueprint.\nEach property identifier can be `<= 100 characters` long, values must match the following pattern: `^[A-Za-z0-9@_=\\\\-]+$`.\n","propertyNames":{"pattern":"^[A-Za-z0-9@_=\\\\-]+$","maxLength":100},"additionalProperties":{"type":"object","properties":{"title":{"type":"string","description":"The title of the property."},"description":{"type":"string","description":"The description of the property."},"icon":{"type":"string","description":"The icon of the property."},"type":{"enum":["string","number","boolean","object","array"],"description":"The [type](https://docs.port.io/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/#supported-properties) of the property."},"format":{"enum":["date-time","url","email","idn-email","ipv4","ipv6","markdown","yaml","user","blueprints","team","timer","proto"],"description":"The type's [format](https://docs.port.io/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/#supported-properties)."},"spec":{"enum":["open-api","embedded-url","async-api"],"description":"The [spec](https://docs.port.io/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/#supported-properties) of the property."},"specAuthentication":{"type":"object","description":"When using the `spec` property with `embedded-url`, the authentication spec of the property.","properties":{"clientId":{"type":"string"},"authorizationUrl":{"type":"string","format":"url"},"tokenUrl":{"type":"string","format":"url"},"authorizationScope":{"type":"array","items":{"type":"string"},"default":["openid"]}},"additionalProperties":false,"required":["clientId","authorizationUrl","tokenUrl"]}},"required":["type"]}},"required":{"type":"array","items":{"type":"string"},"description":"The required properties of the blueprint, these must be provided when creating an entity based on this blueprint. This is an array of the required properties' identifiers."}},"additionalProperties":false,"required":["properties"]},"calculationProperties":{"type":"object","description":"The [calculation\nproperties](${DOCS_URL}/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/calculation-property/)\nof the blueprint.\nEach calculation property identifier can be `<= 100 characters` long, values must match the following pattern: `^[A-Za-z0-9@_=\\\\-]+$`.\n","default":{},"propertyNames":{"pattern":"^[A-Za-z0-9@_=\\\\-]+$","maxLength":100},"additionalProperties":{"type":"object","additionalProperties":false,"properties":{"title":{"type":"string","description":"The title of the property."},"description":{"type":"string","description":"The description of the property."},"icon":{"type":"string","description":"The icon of the property."},"calculation":{"type":"string","description":"The JQ expression that calculates the value of the property."},"type":{"enum":["string","number","boolean","object","array"],"description":"The type of the property."},"format":{"enum":["date-time","url","email","idn-email","ipv4","ipv6","markdown","yaml","user","team","proto"],"description":"The format of the property."},"spec":{"enum":["open-api","embedded-url","async-api"],"description":"The spec of the property."},"specAuthentication":{"type":"object","description":"When using the `spec` property with `embedded-url`, the authentication spec of the property.","properties":{"clientId":{"type":"string"},"authorizationUrl":{"type":"string","format":"url"},"tokenUrl":{"type":"string","format":"url"},"authorizationScope":{"type":"array","items":{"type":"string"},"default":["openid"]}},"additionalProperties":false,"required":["clientId","authorizationUrl","tokenUrl"]},"colorized":{"type":"boolean","description":"Whether the property is colorized."},"colors":{"type":"object","description":"When using the `colorized` property, the colors of the property.","additionalProperties":{"enum":["blue","turquoise","orange","purple","pink","yellow","green","red","gold","silver","paleBlue","darkGray","lightGray","bronze","lime","olive","brown"]}},"items":{"type":"object","properties":{"type":{"enum":["string","number","boolean","object","array"],"description":"The type of the item."},"format":{"description":"The format of the item.","enum":["date-time","url","email","idn-format","ipv4","ipv6","markdown","yaml","user","team","timer","proto"]}}}},"required":["calculation","type"]}},"mirrorProperties":{"type":"object","description":"The [mirror\nproperties](${DOCS_URL}/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/mirror-property/)\nof the blueprint.\nEach mirror property identifier can be `<= 100 characters` long, values must match the following pattern: `^[A-Za-z0-9@_=\\\\-]+$`.\n","propertyNames":{"pattern":"^[A-Za-z0-9@_=\\\\-]+$","maxLength":100},"additionalProperties":{"type":"object","properties":{"path":{"type":"string","pattern":"^(?:[A-Za-z0-9@_=\\-$]+\\.)+?(\\w|\\$|@|-)*?[^\\.]+$","description":"The path to the property in the related blueprint. This is a string of relation identifiers separated by dots, the last identifier is the property identifier."},"title":{"type":"string","description":"The title of the property."}},"additionalProperties":false,"required":["path"]}},"aggregationProperties":{"type":"object","description":"The [aggregation\nproperties](${DOCS_URL}/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/aggregation-property/)\nof the blueprint.\nEach aggregation property identifier can be `<= 100 characters` long, values must match the following pattern: `^[A-Za-z0-9@_=\\\\-]+$`.\n","default":{},"propertyNames":{"pattern":"^[A-Za-z0-9@_=\\\\-]+$","maxLength":100},"additionalProperties":{"type":"object","properties":{"title":{"type":"string","description":"The title of the property."},"description":{"type":"string","description":"The description of the property."},"icon":{"type":"string","description":"The icon of the property."},"type":{"enum":["number"],"default":"number","description":"The type of the property. This is the type of the aggregation result."},"target":{"type":"string","description":"The blueprint identifier to run the aggregation on."},"calculationSpec":{"type":"object","oneOf":[{"oneOf":[{"type":"object","properties":{"func":{"description":"The function to use for the aggregation.","enum":["count"]},"calculationBy":{"type":"string","description":"Whether to aggregate by entities or properties.","enum":["entities"]}},"required":["func","calculationBy"],"additionalProperties":false},{"type":"object","properties":{"func":{"description":"The function to use for the aggregation.","enum":["average"]},"measureTimeBy":{"type":"string","description":"The time property to use for the aggregation."},"averageOf":{"type":"string","enum":["hour","day","week","month","total"]},"calculationBy":{"type":"string","description":"Whether to aggregate by entities or properties.","enum":["entities"]}},"required":["func","calculationBy","averageOf"],"additionalProperties":false}]},{"oneOf":[{"type":"object","properties":{"func":{"type":"string","enum":["sum","min","max","median"],"description":"The function to use for the aggregation."},"property":{"type":"string","description":"The property to aggregate."},"calculationBy":{"type":"string","description":"Whether to aggregate by property or entities.","enum":["property"]}},"additionalProperties":false,"required":["func","property","calculationBy"]},{"type":"object","properties":{"func":{"description":"The function to use for the aggregation.","enum":["average"]},"measureTimeBy":{"type":"string","description":"The time property to use for the aggregation."},"averageOf":{"type":"string","enum":["hour","day","week","month","total"]},"property":{"type":"string","description":"The property to aggregate."},"calculationBy":{"type":"string","description":"Whether to aggregate by property or entities.","enum":["property"]}},"additionalProperties":false,"required":["func","property","calculationBy","averageOf"]}]}],"description":"The calculation spec of the property."},"query":{"type":"object","properties":{"combinator":{"enum":["and","or"],"description":"The combinator to use for the rules."},"rules":{"type":"array","items":{"anyOf":[{"type":"object","title":"Date Rule","properties":{"property":{"oneOf":[{"type":"string"},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]},"operator":{"enum":["between","notBetween","="]},"value":{"type":"object","oneOf":[{"type":"object","title":"Date Range","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}},"required":["from","to"]},{"type":"object","title":"Date Preset","properties":{"preset":{"type":"string","enum":["today","tomorrow","yesterday","lastDay","lastWeek","last2Weeks","lastMonth","last3Months","last6Months","last12Months"]}},"required":["preset"]},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]}},"required":["property","operator","value"],"additionalProperties":false},{"type":"object","title":"Empty Rule","oneOf":[{"type":"object","title":"Empty Rule","properties":{"operator":{"enum":["isEmpty","isNotEmpty"]},"property":{"type":"string"}},"required":["operator","property"],"additionalProperties":false}]},{"type":"object","title":"Number Rule","properties":{"property":{"oneOf":[{"type":"string"},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]},"operator":{"enum":[">",">=","<","<="]},"value":{"anyOf":[{"type":"number","title":"number"},{"type":"string","format":"date-time","title":"date-time"},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]}},"required":["property","operator","value"],"additionalProperties":false},{"type":"object","title":"Expired Rule","oneOf":[{"type":"object","title":"Expired Rule","properties":{"operator":{"enum":["isExpired","isNotExpired"]},"property":{"type":"string"}},"required":["operator","property"],"additionalProperties":false}]},{"type":"object","title":"String Rule","oneOf":[{"type":"object","title":"String Rule","properties":{"property":{"oneOf":[{"type":"string"},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]},"operator":{"enum":["=","!=","containsAny","contains","doesNotContains","beginsWith","doesNotBeginsWith","endsWith","doesNotEndsWith","in","notIn"]},"value":{"anyOf":[{"type":"null","title":"null"},{"type":"string","title":"string"},{"type":"number","title":"number"},{"type":"boolean","title":"boolean"},{"type":"string","format":"date-time","title":"date-time"},{"type":"array","items":{"type":"string"},"title":"array"},{"type":"array","items":{"type":"number"},"title":"array"},{"type":"array","items":{"type":"boolean"},"title":"array"},{"type":"array","items":{"type":"string","format":"date-time"},"title":"array"},{"type":"object","properties":{"property":{"type":"string"},"context":{"type":"string","enum":["user","userTeams"]}},"required":["property","context"]}]}},"additionalProperties":false,"required":["property"...

@aws-amplify-eu-west-1
Copy link

This pull request is automatically being deployed by Amplify Hosting (learn more).

Access this pull request here: https://pr-2935.d2ngvl90zqbob8.amplifyapp.com

@sivanel97 sivanel97 merged commit 18c355b into main Oct 22, 2025
5 checks passed
@sivanel97 sivanel97 deleted the update-apiSpec-20-10 branch October 22, 2025 09:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants