Skip to content

Apply App Manifest

POST
/apps/{app_id}/manifest

Apply a graph8.app.yaml to this app.

Publishes the objects: block as a schema version through the same path POST /{app_id}/schema-versions uses, including the digest idempotency and the failure-isolated tenant fan-out, and stores frontend: / backend: as the build config a later deploy reads.

Refuses when the manifest’s app.slug names a DIFFERENT app than the one in the path. Both halves of that mismatch are plausible mistakes — a copied file, a wrong id in a script — and either one silently applied would publish one app’s schema into another app’s tenants.

A manifest with no objects: publishes nothing. That is not an oversight: an empty schema would archive every object the app has ever declared across every consented tenant, so schema_publish refuses it, and a build-config only manifest is a legitimate thing to apply.

Authorizations

Parameters

Path Parameters

app_id
required
string

Header Parameters

X-Org-Id
Any of:
string

Request Body required

A graph8.app.yaml document, verbatim.

object
manifest
required

The full graph8.app.yaml document as text. Sent verbatim, including newlines. Rejected above 256 KiB by the parser.

string

Responses

200

Successful Response

object
data
required

What an apply actually did, part by part.

Each field answers “did this half happen”, because a manifest declaring only objects: and one declaring only backend: are both legal and do different amounts of work. A caller should never have to infer that from a 200.

object
app_id
required
string
deploy_config_stored
boolean
materialization
Any of:

How the fan-out went, as counts. Never tenant ids — see module docstring.

object
failed
integer
ready
integer
skipped

Tenants already materialized on this exact digest.

integer
total
integer
schema_created

False when an identical schema was already published. The version named above exists either way; this is what says nothing changed.

boolean
schema_version
Any of:

One published (or draft) object-schema version.

object
app_id
required
string
created_at
Any of:
string format: date-time
deprecated_at
Any of:
string format: date-time
digest
required

SHA-256 of the canonical schema. Re-publishing the same schema resolves here.

string
manifest

The stored canonical schema. Self-describing, so the version needs no other source.

object
key
additional properties
any
published_at
Any of:
string format: date-time
schema_version_id
required
string
status
required
string
version
required

Human-facing ordinal. Nothing keys on it; the digest is the identity.

integer
summary
required

What a valid manifest declares. The echo of a successful parse.

Deliberately a summary and not the parsed document: a builder who wants the document already has it, and echoing it back would make this response the second place the shape is defined.

object
app_name
Any of:
string
app_slug
Any of:
string
attribute_count
integer
has_backend
boolean
has_frontend
boolean
object_slugs
Array<string>
version
required
integer
pagination
Any of:
object
has_next
required

Whether there are more pages

boolean
limit
required

Items per page

integer
next_cursor
Any of:
string
page
required

Current page number (1-indexed)

integer
total
required

Total number of items

integer

422

Validation Error

object
detail
Array<object>
object
loc
required
Array
msg
required
string
type
required
string