---
title: "Get this layer's alignment manifest"
method: GET
path: "/alignment/platform/{scope_id}"
tags: ["Alignment"]
---

# Get this layer's alignment manifest

`GET /alignment/platform/{scope_id}`

## Request

- Base URL: `https://api.mnemom.ai/v1`
- URL: `https://api.mnemom.ai/v1/alignment/platform/{scope_id}`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Mnemom-Api-Key`
  - API key in cookie `mnemom_session`

Returns the platform-scope alignment spec as authored. Response is content-negotiated — YAML by default, or JSON with `Accept: application/json`. Pass `?include_composition=true` to include the `_composition` metadata block describing which scopes were merged. Pass `?include=sources` (see ADR-053) for the scope-resolution envelope — the contributing layers plus the composed result; the envelope shape is scope-specific. ETag is computed from `content_hash` (cards-as-primitive Phase 1); `If-None-Match` returns 304. For the composed view across scopes, use the `/effective` sub-resource (Wave 2).

## Path parameters

- `scope_id` 'default', required

## Query parameters

- `include_composition` boolean
- `include` 'sources'

## Headers

- `Accept` 'text/yaml' | 'application/yaml' | 'application/json'

## Response `200`

Alignment manifest at this scope.

- union
  - PlatformCardDefaultsResponse: Base (non-`?include=sources`) JSON body of `GET /v1/{alignment,protection}/platform/{scope_id}`. The platform scope is a template/defaults wrapper, not a full composed card: `handleGet` in src/composition/platform-handlers.ts returns `{ defaults, available }` where `defaults` is the authored platform-defaults JSON (a partial card) or `null` when none is set. YAML is the default representation and is not response-validated; this schema governs the JSON variant returned on `Accept: application/json`.
    - `defaults` object, nullable: The authored platform-scope defaults JSON (a partial card), or `null` when no platform defaults are set.
    - `available` boolean, required: True when platform-scope defaults are set (`defaults !== null`).
  - PlatformCardSourcesEnvelope: Two-scope sources envelope returned by `GET /v1/{alignment,protection}/platform/{scope_id}?include=sources` (JSON-only). Composed equals Platform — the platform scope is the top of the cascade, so there is no upstream layer to constrain it. Shape matches the `?include=sources` branch of `handleGet` in src/composition/platform-handlers.ts.
    - `platform` PlatformCardSourceScope, required: One scope leaf in the platform two-scope sources envelope. `card_json` is the platform-defaults JSON (a partial card) or `null`.
      - `card_json` object, nullable
      - `available` boolean, required
    - `composed` PlatformCardSourceScope, required: One scope leaf in the platform two-scope sources envelope. `card_json` is the platform-defaults JSON (a partial card) or `null`.
      - `card_json` object, nullable
      - `available` boolean, required

## Other responses

- `304`: Not Modified — the client's `If-None-Match` matches the current ETag.
- `400`: Bad request
- `401`: Authentication required
- `403`: Forbidden
- `404`: Resource not found
- `429`: Rate-limit exceeded. The global per-IP limiter (100 requests/minute, applied to every `/v1/*` route) rejected this request. Back off until the window resets — `Retry-After` carries the cooldown in seconds and `X-RateLimit-Reset` the absolute reset time.
- `500`: Server error — request was well-formed but the server failed to fulfill it. Typically a downstream dependency (DB / RPC / external API) returned an unexpected error.

---

[API](https://skmtc.dev/mnemom/apis/mnemom-api.md) · [All operations](https://skmtc.dev/mnemom/apis/mnemom-api/llms.txt) · [OpenAPI document](https://skmtc.dev/mnemom/apis/mnemom-api/revisions/274b7a6ea182?raw)
