> For the complete documentation index, see [llms.txt](https://docs.spike.sh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.spike.sh/spike-api-docs/components.md).

# Components

Create, read and update the components shown on a status page. Components nest one level deep: set a component's `parent` to another component's id to nest it there.

## Get all components in a status page

> Gets a list of all the components linked to a status page. The list is flat: every component carries a \`parent\` (the id it is nested under, or \`null\`) and an \`order\`, so you can rebuild the nesting yourself. Rows come back parent-first, with each parent's nested components directly after it.

```json
{"openapi":"3.1.0","info":{"title":"Spike API","version":"1.0.0"},"tags":[{"name":"Components","description":"Create, read and update the components shown on a status page. Components nest one level deep: set a component's `parent` to another component's id to nest it there."}],"servers":[{"url":"https://statuspage.spike.sh","description":"Status page server"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your organisation's API key. Create one in the Spike dashboard under Settings > API. Sent on every request as the `x-api-key` header."}},"schemas":{"StatusPageComponent":{"type":"object","description":"A component on a status page. Components can be nested one level deep: a top-level component may have nested components under it, and a nested component cannot itself have anything nested under it.","properties":{"_id":{"type":"string","description":"The component's id. Use it as the `parent` of a nested component."},"name":{"type":"string","description":"The component's name, as it appears on the status page."},"desc":{"type":"string","description":"Free-text description shown under the name."},"status":{"type":"string","enum":["operational","degraded-performance","partial-outage","critical-outage","planned-maintenance"],"description":"The component's own status. Any other value is stored but will not reflect on the status page."},"effectiveStatus":{"type":"string","enum":["operational","degraded-performance","partial-outage","critical-outage","planned-maintenance"],"description":"Read-only, computed. The status the status page actually shows for this component: for a top-level component with nested components it is the worst of its own `status` and its nested components' statuses; for everything else it equals `status`. Ranked, least to most severe: `operational`, `planned-maintenance`, `degraded-performance`, `partial-outage`, `critical-outage`."},"parent":{"type":["string","null"],"description":"The id of the component this one is nested under, or `null` when it is top-level. Send it on create or update to nest a component. The parent must already exist, belong to the same status page, and be top-level itself."},"order":{"type":"number","description":"Sort position among siblings — top-level components share one sequence, and each parent's nested components have their own. Rows are returned parent-first with each parent's nested components directly after it, both sorted by `order`."},"startDate":{"type":["string","null"],"description":"The date from which uptime is tracked for this component."},"statusPage":{"type":"string","description":"The id of the status page this component belongs to."}}},"Error":{"type":"object","properties":{"message":{"type":"string","description":"Error message describing the problem"},"error":{"type":"string","description":"Error type or code"},"success":{"type":"boolean","description":"Present on the endpoints whose handlers include it (for example the API-key filter and the public on-call routes). Always `false` on an error."},"valid_api":{"type":"boolean","description":"Present on `401`s produced by the session/API-key filter. `false` means the supplied `x-api-key` was not recognised."},"statusCode":{"type":"number","description":"Echo of the HTTP status, present on a few permission errors."},"status":{"type":"boolean","description":"Present on the status-page component write endpoints, which answer a rejected write `{status: false, error, message}`. Always `false` on an error."}}}}},"paths":{"/api/status-page/{status_page_id}/component":{"get":{"operationId":"getApiStatusPageByStatusPageIdComponent","summary":"Get all components in a status page","description":"Gets a list of all the components linked to a status page. The list is flat: every component carries a `parent` (the id it is nested under, or `null`) and an `order`, so you can rebuild the nesting yourself. Rows come back parent-first, with each parent's nested components directly after it.","tags":["Components"],"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key. Find it in your Spike dashboard under Settings > API."},{"name":"status_page_id","in":"path","required":true,"schema":{"type":"string"},"description":"status_page_id parameter"},{"name":"page","in":"query","required":false,"schema":{"type":"number"},"description":"Optional. Omit it to get every component on the status page, which is what you want when you are rebuilding the nesting — a narrowed response can separate a parent from the components nested under it. Pass a page number to read `perPage` at a time; `total` tells you when to stop. A missing, zero, negative or non-numeric value is treated as \"no page asked for\" and returns the whole set."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"components":{"type":"array","items":{"$ref":"#/components/schemas/StatusPageComponent"}},"total":{"type":"number","description":"How many components the status page has in total, whether or not `page` narrowed the response."},"page":{"type":["number","null"],"description":"The page returned, or `null` when the whole set was returned because no usable `page` was asked for."},"perPage":{"type":"number","description":"How many components a page holds. Read it rather than hardcoding it."}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Get a component

> Get details of a status page component, including its \`parent\` (the component it is nested under, or \`null\`) and its \`order\`.

```json
{"openapi":"3.1.0","info":{"title":"Spike API","version":"1.0.0"},"tags":[{"name":"Components","description":"Create, read and update the components shown on a status page. Components nest one level deep: set a component's `parent` to another component's id to nest it there."}],"servers":[{"url":"https://statuspage.spike.sh","description":"Status page server"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your organisation's API key. Create one in the Spike dashboard under Settings > API. Sent on every request as the `x-api-key` header."}},"schemas":{"StatusPageComponent":{"type":"object","description":"A component on a status page. Components can be nested one level deep: a top-level component may have nested components under it, and a nested component cannot itself have anything nested under it.","properties":{"_id":{"type":"string","description":"The component's id. Use it as the `parent` of a nested component."},"name":{"type":"string","description":"The component's name, as it appears on the status page."},"desc":{"type":"string","description":"Free-text description shown under the name."},"status":{"type":"string","enum":["operational","degraded-performance","partial-outage","critical-outage","planned-maintenance"],"description":"The component's own status. Any other value is stored but will not reflect on the status page."},"effectiveStatus":{"type":"string","enum":["operational","degraded-performance","partial-outage","critical-outage","planned-maintenance"],"description":"Read-only, computed. The status the status page actually shows for this component: for a top-level component with nested components it is the worst of its own `status` and its nested components' statuses; for everything else it equals `status`. Ranked, least to most severe: `operational`, `planned-maintenance`, `degraded-performance`, `partial-outage`, `critical-outage`."},"parent":{"type":["string","null"],"description":"The id of the component this one is nested under, or `null` when it is top-level. Send it on create or update to nest a component. The parent must already exist, belong to the same status page, and be top-level itself."},"order":{"type":"number","description":"Sort position among siblings — top-level components share one sequence, and each parent's nested components have their own. Rows are returned parent-first with each parent's nested components directly after it, both sorted by `order`."},"startDate":{"type":["string","null"],"description":"The date from which uptime is tracked for this component."},"statusPage":{"type":"string","description":"The id of the status page this component belongs to."}}},"Error":{"type":"object","properties":{"message":{"type":"string","description":"Error message describing the problem"},"error":{"type":"string","description":"Error type or code"},"success":{"type":"boolean","description":"Present on the endpoints whose handlers include it (for example the API-key filter and the public on-call routes). Always `false` on an error."},"valid_api":{"type":"boolean","description":"Present on `401`s produced by the session/API-key filter. `false` means the supplied `x-api-key` was not recognised."},"statusCode":{"type":"number","description":"Echo of the HTTP status, present on a few permission errors."},"status":{"type":"boolean","description":"Present on the status-page component write endpoints, which answer a rejected write `{status: false, error, message}`. Always `false` on an error."}}}}},"paths":{"/api/status-page/{status_page_id}/component/{component_id}":{"get":{"operationId":"getApiStatusPageByStatusPageIdComponentByComponentId","summary":"Get a component","description":"Get details of a status page component, including its `parent` (the component it is nested under, or `null`) and its `order`.","tags":["Components"],"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key. Find it in your Spike dashboard under Settings > API."},{"name":"status_page_id","in":"path","required":true,"schema":{"type":"string"},"description":"status_page_id parameter"},{"name":"component_id","in":"path","required":true,"schema":{"type":"string"},"description":"component_id parameter"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"spectrum":{"type":"array","description":"The component's 90-day uptime bars.","items":{"type":"object"}},"incidents":{"type":"array","description":"Incidents that affected this component.","items":{"type":"object"}}},"allOf":[{"$ref":"#/components/schemas/StatusPageComponent"}]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Create a component

> Create a new component for a status page\
> \
> \`\`\`\
> {\
> &#x9;"components": \[\
> &#x9;	{\
> &#x9;		"name": "title of the component",\
> &#x9;		"desc": "Description of hthe component",\
> &#x9;		"status": "degraded-performance",\
> &#x9;		"private": true\
> &#x9;	}\
> &#x9;]\
> }\
> \`\`\`\
> \
> You can create multiple components at once.\
> \
> \### Params:\
> \
> \`name\*\`: Title of the component.\
> \
> \`desc\*\`: Updated description\
> \
> \`status\`: Status of the component valid choices for status are \`operational\`, \`degraded-performance\`, \`partial-outage\`, \`critical-outage\` any other choice will not reflect on the status page\
> \
> \`private\`: You can choose to private or public the status page based on this flag\
> \
> \`parent\`: The id of the component this one nests under. Omit it (or send \`null\`) for a top-level component.\
> \
> \`order\`: Sort position among its siblings.\
> \
> \\\* Required\
> \
> \### Nested components\
> \
> To nest one component under another, create the parent first and then create the child with the parent's \`\_id\` as its \`parent\`. There is no separate endpoint and no nested request body — the \`parent\` field is what makes a component nested.\
> \
> \`\`\`\
> \# 1. create the parent, and read its \_id from the response\
> {"components": \[{"name": "Asia"}]}\
> \
> \# 2. create the components nested under it\
> {\
> &#x9;"components": \[\
> &#x9;	{"name": "India", "parent": "66c1d2e3f4a5b60718293a4c", "order": 0},\
> &#x9;	{"name": "Japan", "parent": "66c1d2e3f4a5b60718293a4c", "order": 1}\
> &#x9;]\
> }\
> \`\`\`\
> \
> Rules, each answered as a \`400\` with \`error: invalid\_parent\`:\
> \
> \* The parent must already exist and belong to the same status page.\
> \* Nesting is one level deep — you cannot nest under a component that is itself nested.\
> \* A component cannot be its own parent.\
> \
> Every row in \`components\` is validated before any of them is saved, so one bad row writes nothing.\
> \
> A parent's status is not something you set: the status page shows the worst of the parent's own \`status\` and the statuses of everything nested under it. Read it back as \`effectiveStatus\` on the list endpoint.

````json
{"openapi":"3.1.0","info":{"title":"Spike API","version":"1.0.0"},"tags":[{"name":"Components","description":"Create, read and update the components shown on a status page. Components nest one level deep: set a component's `parent` to another component's id to nest it there."}],"servers":[{"url":"https://statuspage.spike.sh","description":"Status page server"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your organisation's API key. Create one in the Spike dashboard under Settings > API. Sent on every request as the `x-api-key` header."}},"schemas":{"StatusPageComponent":{"type":"object","description":"A component on a status page. Components can be nested one level deep: a top-level component may have nested components under it, and a nested component cannot itself have anything nested under it.","properties":{"_id":{"type":"string","description":"The component's id. Use it as the `parent` of a nested component."},"name":{"type":"string","description":"The component's name, as it appears on the status page."},"desc":{"type":"string","description":"Free-text description shown under the name."},"status":{"type":"string","enum":["operational","degraded-performance","partial-outage","critical-outage","planned-maintenance"],"description":"The component's own status. Any other value is stored but will not reflect on the status page."},"effectiveStatus":{"type":"string","enum":["operational","degraded-performance","partial-outage","critical-outage","planned-maintenance"],"description":"Read-only, computed. The status the status page actually shows for this component: for a top-level component with nested components it is the worst of its own `status` and its nested components' statuses; for everything else it equals `status`. Ranked, least to most severe: `operational`, `planned-maintenance`, `degraded-performance`, `partial-outage`, `critical-outage`."},"parent":{"type":["string","null"],"description":"The id of the component this one is nested under, or `null` when it is top-level. Send it on create or update to nest a component. The parent must already exist, belong to the same status page, and be top-level itself."},"order":{"type":"number","description":"Sort position among siblings — top-level components share one sequence, and each parent's nested components have their own. Rows are returned parent-first with each parent's nested components directly after it, both sorted by `order`."},"startDate":{"type":["string","null"],"description":"The date from which uptime is tracked for this component."},"statusPage":{"type":"string","description":"The id of the status page this component belongs to."}}},"Error":{"type":"object","properties":{"message":{"type":"string","description":"Error message describing the problem"},"error":{"type":"string","description":"Error type or code"},"success":{"type":"boolean","description":"Present on the endpoints whose handlers include it (for example the API-key filter and the public on-call routes). Always `false` on an error."},"valid_api":{"type":"boolean","description":"Present on `401`s produced by the session/API-key filter. `false` means the supplied `x-api-key` was not recognised."},"statusCode":{"type":"number","description":"Echo of the HTTP status, present on a few permission errors."},"status":{"type":"boolean","description":"Present on the status-page component write endpoints, which answer a rejected write `{status: false, error, message}`. Always `false` on an error."}}}}},"paths":{"/api/status-page/{status_page_id}/component/create":{"post":{"operationId":"postApiStatusPageByStatusPageIdComponentCreate","summary":"Create a component","description":"Create a new component for a status page\n\n```\n{\n\t\"components\": [\n\t\t{\n\t\t\t\"name\": \"title of the component\",\n\t\t\t\"desc\": \"Description of hthe component\",\n\t\t\t\"status\": \"degraded-performance\",\n\t\t\t\"private\": true\n\t\t}\n\t]\n}\n```\n\nYou can create multiple components at once.\n\n### Params:\n\n`name*`: Title of the component.\n\n`desc*`: Updated description\n\n`status`: Status of the component valid choices for status are `operational`, `degraded-performance`, `partial-outage`, `critical-outage` any other choice will not reflect on the status page\n\n`private`: You can choose to private or public the status page based on this flag\n\n`parent`: The id of the component this one nests under. Omit it (or send `null`) for a top-level component.\n\n`order`: Sort position among its siblings.\n\n\\* Required\n\n### Nested components\n\nTo nest one component under another, create the parent first and then create the child with the parent's `_id` as its `parent`. There is no separate endpoint and no nested request body — the `parent` field is what makes a component nested.\n\n```\n# 1. create the parent, and read its _id from the response\n{\"components\": [{\"name\": \"Asia\"}]}\n\n# 2. create the components nested under it\n{\n\t\"components\": [\n\t\t{\"name\": \"India\", \"parent\": \"66c1d2e3f4a5b60718293a4c\", \"order\": 0},\n\t\t{\"name\": \"Japan\", \"parent\": \"66c1d2e3f4a5b60718293a4c\", \"order\": 1}\n\t]\n}\n```\n\nRules, each answered as a `400` with `error: invalid_parent`:\n\n* The parent must already exist and belong to the same status page.\n* Nesting is one level deep — you cannot nest under a component that is itself nested.\n* A component cannot be its own parent.\n\nEvery row in `components` is validated before any of them is saved, so one bad row writes nothing.\n\nA parent's status is not something you set: the status page shows the worst of the parent's own `status` and the statuses of everything nested under it. Read it back as `effectiveStatus` on the list endpoint.","tags":["Components"],"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key. Find it in your Spike dashboard under Settings > API."},{"name":"status_page_id","in":"path","required":true,"schema":{"type":"string"},"description":"status_page_id parameter"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["components"],"properties":{"components":{"type":"array","description":"One entry per component to create. Every entry is validated before the first one is saved.","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The component's name. Required and non-blank."},"desc":{"type":"string","description":"Free-text description shown under the name."},"status":{"type":"string","enum":["operational","degraded-performance","partial-outage","critical-outage","planned-maintenance"],"description":"Defaults to `operational`. Any other value is stored but will not reflect on the status page."},"private":{"type":"boolean","description":"Keep the component off the public page."},"startDate":{"type":"string","description":"When to start tracking uptime from. Defaults to now."},"parent":{"type":["string","null"],"description":"The id of the component this one nests under. Omit it (or send `null`) for a top-level component. The parent must already exist, belong to the same status page, and be top-level itself — nesting is one level deep."},"order":{"type":"number","description":"Sort position among its siblings. Defaults to `0`."}}}}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"boolean"},"components":{"type":"array","items":{"$ref":"#/components/schemas/StatusPageComponent"}}}}}}},"400":{"description":"Bad request. `error: bad_request` when a row is unusable (for example a blank name, naming the row that failed), and `error: invalid_parent` when `parent` breaks one of the nesting rules. Nothing is saved in either case.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## Update a component

> Update a component. You can update name, description, status. you can also choose to private or public a status page.\
> \
> \`\`\`\
> {\
> &#x9;"name": "title of the component",\
> &#x9;"desc": "Description of hthe component",\
> &#x9;"status": "degraded-performance",\
> &#x9;"private": true\
> }\
> \`\`\`\
> \
> \### Params:\
> \
> \`name\`: Title of the component.\
> \
> \`desc\`: Updated description\
> \
> \`status\`: Status of the component valid choices for status are \`operational\`, \`degraded-performance\`, \`partial-outage\`, \`critical-outage\` any other choice will not reflect on the status page\
> \
> \`private\`: You can choose to private or public the status page based on this flag\
> \
> \`parent\`: Where this component is nested. Send a component id to nest it there, \`null\` to lift it back to the top level, or leave the field out entirely to leave the nesting untouched.\
> \
> \`order\`: Sort position among its siblings.\
> \
> \### Changing where a component is nested\
> \
> \`parent\` has three meanings here, and they are easy to confuse:\
> \
> \* field absent — leave the nesting as it is\
> \* \`null\` — make this a top-level component\
> \* a component id — nest it under that component\
> \
> The same rules as create apply, each answered as a \`400\` with \`error: invalid\_parent\`: the parent must exist, be on the same status page, and be top-level itself. A component that already has things nested under it cannot itself be nested — move or delete those first.

````json
{"openapi":"3.1.0","info":{"title":"Spike API","version":"1.0.0"},"tags":[{"name":"Components","description":"Create, read and update the components shown on a status page. Components nest one level deep: set a component's `parent` to another component's id to nest it there."}],"servers":[{"url":"https://statuspage.spike.sh","description":"Status page server"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your organisation's API key. Create one in the Spike dashboard under Settings > API. Sent on every request as the `x-api-key` header."}},"schemas":{"StatusPageComponent":{"type":"object","description":"A component on a status page. Components can be nested one level deep: a top-level component may have nested components under it, and a nested component cannot itself have anything nested under it.","properties":{"_id":{"type":"string","description":"The component's id. Use it as the `parent` of a nested component."},"name":{"type":"string","description":"The component's name, as it appears on the status page."},"desc":{"type":"string","description":"Free-text description shown under the name."},"status":{"type":"string","enum":["operational","degraded-performance","partial-outage","critical-outage","planned-maintenance"],"description":"The component's own status. Any other value is stored but will not reflect on the status page."},"effectiveStatus":{"type":"string","enum":["operational","degraded-performance","partial-outage","critical-outage","planned-maintenance"],"description":"Read-only, computed. The status the status page actually shows for this component: for a top-level component with nested components it is the worst of its own `status` and its nested components' statuses; for everything else it equals `status`. Ranked, least to most severe: `operational`, `planned-maintenance`, `degraded-performance`, `partial-outage`, `critical-outage`."},"parent":{"type":["string","null"],"description":"The id of the component this one is nested under, or `null` when it is top-level. Send it on create or update to nest a component. The parent must already exist, belong to the same status page, and be top-level itself."},"order":{"type":"number","description":"Sort position among siblings — top-level components share one sequence, and each parent's nested components have their own. Rows are returned parent-first with each parent's nested components directly after it, both sorted by `order`."},"startDate":{"type":["string","null"],"description":"The date from which uptime is tracked for this component."},"statusPage":{"type":"string","description":"The id of the status page this component belongs to."}}},"Error":{"type":"object","properties":{"message":{"type":"string","description":"Error message describing the problem"},"error":{"type":"string","description":"Error type or code"},"success":{"type":"boolean","description":"Present on the endpoints whose handlers include it (for example the API-key filter and the public on-call routes). Always `false` on an error."},"valid_api":{"type":"boolean","description":"Present on `401`s produced by the session/API-key filter. `false` means the supplied `x-api-key` was not recognised."},"statusCode":{"type":"number","description":"Echo of the HTTP status, present on a few permission errors."},"status":{"type":"boolean","description":"Present on the status-page component write endpoints, which answer a rejected write `{status: false, error, message}`. Always `false` on an error."}}}}},"paths":{"/api/status-page/{status_page_id}/component/{component_id}/update":{"post":{"operationId":"postApiStatusPageByStatusPageIdComponentByComponentIdUpdate","summary":"Update a component","description":"Update a component. You can update name, description, status. you can also choose to private or public a status page.\n\n```\n{\n\t\"name\": \"title of the component\",\n\t\"desc\": \"Description of hthe component\",\n\t\"status\": \"degraded-performance\",\n\t\"private\": true\n}\n```\n\n### Params:\n\n`name`: Title of the component.\n\n`desc`: Updated description\n\n`status`: Status of the component valid choices for status are `operational`, `degraded-performance`, `partial-outage`, `critical-outage` any other choice will not reflect on the status page\n\n`private`: You can choose to private or public the status page based on this flag\n\n`parent`: Where this component is nested. Send a component id to nest it there, `null` to lift it back to the top level, or leave the field out entirely to leave the nesting untouched.\n\n`order`: Sort position among its siblings.\n\n### Changing where a component is nested\n\n`parent` has three meanings here, and they are easy to confuse:\n\n* field absent — leave the nesting as it is\n* `null` — make this a top-level component\n* a component id — nest it under that component\n\nThe same rules as create apply, each answered as a `400` with `error: invalid_parent`: the parent must exist, be on the same status page, and be top-level itself. A component that already has things nested under it cannot itself be nested — move or delete those first.","tags":["Components"],"parameters":[{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string"},"description":"Your API key. Find it in your Spike dashboard under Settings > API."},{"name":"status_page_id","in":"path","required":true,"schema":{"type":"string"},"description":"status_page_id parameter"},{"name":"component_id","in":"path","required":true,"schema":{"type":"string"},"description":"component_id parameter"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"desc":{"type":"string"},"status":{"type":"string","enum":["operational","degraded-performance","partial-outage","critical-outage","planned-maintenance"]},"private":{"type":"boolean"},"startDate":{"type":"string"},"parent":{"type":["string","null"],"description":"Where this component is nested. A component id nests it there, `null` lifts it back to the top level, and leaving the field out entirely leaves the nesting untouched."},"order":{"type":"number","description":"Sort position among its siblings."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"component":{"$ref":"#/components/schemas/StatusPageComponent"}}}}}},"400":{"description":"Bad request. `error: invalid_parent` when `parent` breaks one of the nesting rules; nothing is saved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.spike.sh/spike-api-docs/components.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
