Skip to content

feat: API specs update for version latest#83

Merged
ChiragAgg5k merged 1 commit into
mainfrom
feat-latest-specs
Jun 24, 2026
Merged

feat: API specs update for version latest#83
ChiragAgg5k merged 1 commit into
mainfrom
feat-latest-specs

Conversation

@appwrite-specs

Copy link
Copy Markdown
Contributor

This PR contains API specification updates for version latest.

@ChiragAgg5k ChiragAgg5k merged commit 2d7c26d into main Jun 24, 2026
2 checks passed
@greptile-apps

greptile-apps Bot commented Jun 24, 2026

Copy link
Copy Markdown

Greptile Summary

This PR updates the latest Appwrite OpenAPI specs. The main changes are:

  • Marks legacy database transaction and text attribute endpoints as deprecated.
  • Adds OAuth2 resource indicator fields and device verification URL examples.
  • Updates usage APIs from single-metric responses to multi-metric response shapes.
  • Adds specification type query parameters for functions and sites.
  • Removes the priority builds health queue endpoint from console and server specs.

Confidence Score: 3/5

Several API contract mismatches in the generated OpenAPI specs should be corrected before merge to avoid broken generated clients and validation failures.

The changed files are limited to specs, but repeated query serialization and schema default mismatches affect client generation and request compatibility across console, server, and client specs.

specs/latest/open-api3-latest-client.json, specs/latest/open-api3-latest-console.json, specs/latest/open-api3-latest-server.json

T-Rex T-Rex Logs

What T-Rex did

  • Reproduced a resource typing issue for the client API parameter in specs/latest/open-api3-latest-client.json by running a targeted Node validation harness against the /oauth2/{project_id}/authorize endpoint.
  • Reproduced a resource typing issue for the server API parameter in specs/latest/open-api3-latest-server.json by running a targeted Node validation harness against GET /oauth2/{project_id}/authorize.
  • Reproduced an array-serialization contract mismatch for GET /usage/events using a Node.js serialization harness, confirmed by structured traces.
  • Reproduced an array-serialization contract mismatch for GET /usage/gauges using a Python/OpenAPI script and accompanying traces.
  • Compared base and head environments, noting endpoint and resource shape changes across the console and OAuth2 resources.

View all artifacts

T-Rex Ran code and verified through T-Rex

Reviews (1): Last reviewed commit: "chore: update API specs and SDK examples" | Re-trigger Greptile

Comment on lines +11683 to +11688
"name": "resource",
"description": "RFC 8707 resource indicator URI or URI list. Each value must be an absolute URI without a fragment.",
"required": false,
"schema": {
"type": "string",
"default": []

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Fix resource typing

This query parameter is documented as a URI or URI list, but the schema is a string with an array default. OpenAPI clients can generate a string argument whose default value is [], and validators/code generators can reject the schema because the default does not match the declared type. If multiple RFC 8707 resources are supported, this needs an array schema with explicit query serialization; otherwise the default should be a string and the docs should describe a single resource.

Artifacts

Repro: targeted OpenAPI parameter default mismatch harness

  • Contains supporting evidence from the run (text/javascript; charset=utf-8).

Repro: validation harness output showing resource string schema with array default mismatch

  • Keeps the command output available without making the summary code-heavy.

View artifacts

T-Rex Ran code and verified through T-Rex

Comment on lines +76862 to 76870
"name": "metrics",
"description": "One to ten metric names. Single-metric callers pass a one-element array. Example: `metrics[]=executions` or `metrics[]=executions&metrics[]=executions.compute` for stacked charts.",
"required": true,
"schema": {
"type": "string",
"x-example": "<METRIC>"
"type": "array",
"items": {
"type": "string"
}
},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Align array serialization

The description tells callers to send metrics[]=executions, but this OpenAPI array parameter is named metrics. Generated clients will serialize the required array as repeated metrics parameters by default, not as bracketed metrics[]. If the API expects the bracketed form, generated clients can send a request that omits the required parameter from the backend's point of view.

Artifacts

Repro: executable OpenAPI query serialization harness

  • Contains supporting evidence from the run (text/javascript; charset=utf-8).

Repro: structured serialization trace showing metrics=executions versus metrics[]=executions

  • Keeps the command output available without making the summary code-heavy.

View artifacts

T-Rex Ran code and verified through T-Rex

Comment on lines +77040 to 77048
"name": "metrics",
"description": "One to ten metric names. Single-metric callers pass a one-element array. Example: `metrics[]=files.storage` or `metrics[]=files.storage&metrics[]=deployments.storage` for stacked charts.",
"required": true,
"schema": {
"type": "string",
"x-example": "<METRIC>"
"type": "array",
"items": {
"type": "string"
}
},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Align array serialization

This required metrics array has the same mismatch as the events endpoint: the docs show metrics[]=files.storage, while the OpenAPI parameter name is metrics. Generated SDKs commonly follow the OpenAPI name and send repeated metrics query parameters, so gauge requests can be rejected or handled as missing metrics when the backend expects metrics[].

Artifacts

Repro: OpenAPI metrics serialization script

  • Contains supporting evidence from the run (text/x-python; charset=utf-8).

Repro: serialization trace showing metrics=files.storage versus metrics[] description

  • Keeps the command output available without making the summary code-heavy.

View artifacts

T-Rex Ran code and verified through T-Rex

Comment on lines +110809 to +110812
"resource": {
"type": "string",
"description": "Resource type when broken down by `resource` (gauges only).",
"x-example": "file",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Correct resource description

usageDataPoint is reused by both usageEventList and usageGaugeList, and /usage/events now advertises resource as an allowed breakdown dimension. This property says resource is gauges only, so generated docs and typed clients can treat event resource breakdowns as unsupported even though the events endpoint can return them.

Suggested change
"resource": {
"type": "string",
"description": "Resource type when broken down by `resource` (gauges only).",
"x-example": "file",
"resource": {
"type": "string",
"description": "Resource type when broken down by `resource`.",
"x-example": "file",

Comment on lines +31791 to +31798
"name": "type",
"description": "Specification type to list. Can be one of: runtimes, builds.",
"required": false,
"schema": {
"type": "string",
"x-example": "runtimes",
"default": "runtimes"
},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Constrain specification type

The new parameter is described as accepting only runtimes or builds, but the schema is an unconstrained string. Generated SDKs and docs will accept any value, so invalid values are only caught at runtime instead of being represented in the API contract.

Comment on lines +31120 to +31125
"name": "resource",
"description": "RFC 8707 resource indicator URI or URI list. Each value must be an absolute URI without a fragment.",
"required": false,
"schema": {
"type": "string",
"default": []

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Fix resource typing

This query parameter is documented as a URI or URI list, but the schema is a string with an array default. OpenAPI clients can generate a string argument whose default value is [], and validators/code generators can reject the schema because the default does not match the declared type. If multiple RFC 8707 resources are supported, this needs an array schema with explicit query serialization; otherwise the default should be a string and the docs should describe a single resource.

Artifacts

Repro: targeted OpenAPI resource parameter validation harness

  • Contains supporting evidence from the run (text/javascript; charset=utf-8).

Repro: failing validation harness output showing string schema with array default

  • Keeps the command output available without making the summary code-heavy.

View artifacts

T-Rex Ran code and verified through T-Rex

Comment on lines +57218 to 57226
"name": "metrics",
"description": "One to ten metric names. Single-metric callers pass a one-element array. Example: `metrics[]=executions` or `metrics[]=executions&metrics[]=executions.compute` for stacked charts.",
"required": true,
"schema": {
"type": "string",
"x-example": "<METRIC>"
"type": "array",
"items": {
"type": "string"
}
},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Align array serialization

The description tells callers to send metrics[]=executions, but this OpenAPI array parameter is named metrics. Generated clients will serialize the required array as repeated metrics parameters by default, not as bracketed metrics[]. If the API expects the bracketed form, generated clients can send a request that omits the required parameter from the backend's point of view.

Artifacts

Repro: executable OpenAPI serialization trace script

  • Contains supporting evidence from the run (text/javascript; charset=utf-8).

Repro: serialization trace output showing metrics versus metrics[] mismatch

  • Keeps the command output available without making the summary code-heavy.

View artifacts

T-Rex Ran code and verified through T-Rex

Comment on lines +57397 to 57405
"name": "metrics",
"description": "One to ten metric names. Single-metric callers pass a one-element array. Example: `metrics[]=files.storage` or `metrics[]=files.storage&metrics[]=deployments.storage` for stacked charts.",
"required": true,
"schema": {
"type": "string",
"x-example": "<METRIC>"
"type": "array",
"items": {
"type": "string"
}
},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Align array serialization

This required metrics array has the same mismatch as the events endpoint: the docs show metrics[]=files.storage, while the OpenAPI parameter name is metrics. Generated SDKs commonly follow the OpenAPI name and send repeated metrics query parameters, so gauge requests can be rejected or handled as missing metrics when the backend expects metrics[].

Artifacts

Repro: executable OpenAPI serialization script

  • Contains supporting evidence from the run (text/javascript; charset=utf-8).

Repro: structured serialization trace output

  • Keeps the command output available without making the summary code-heavy.

View artifacts

T-Rex Ran code and verified through T-Rex

Comment on lines +44275 to +44282
"name": "type",
"description": "Specification type to list. Can be one of: runtimes, builds.",
"required": false,
"schema": {
"type": "string",
"x-example": "runtimes",
"default": "runtimes"
},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Constrain specification type

The new parameter is described as accepting only runtimes or builds, but the schema is an unconstrained string. Generated SDKs and docs will accept any value, so invalid values are only caught at runtime instead of being represented in the API contract.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant