A story represents a piece of planned work in Atono, typically written from the user’s perspective. It includes a user story statement, acceptance criteria (ACs), and optional context to guide implementation or review.
Story attributes
Field | Type | Description |
---|---|---|
title | string | The title of the story. |
handle | string | A unique identifier for the story, shown in the Atono application as the item ID (e.g., STORY-123 ). |
position | integer | The story’s vertical order within its current workflow step, where 0 is the topmost item. Position is relative to the step and team backlog. |
content | array of content chunks | The main user story statement, typically starting with "As a...". Displayed at the top of the story, and composed of DISPLAY_HTML , TEXT , and PERSONA chunks. |
additionalContent | array of content chunks | Optional context shown below the acceptance criteria. Often used for background info, technical notes, or decisions. Supports DISPLAY_HTML and TEXT content chunks. |
cycleTimeMode | string | Indicates whether the story is marked as an OUTLIER (excluded) or remains NORMAL (included) in average cycle time calculations, reports, and staleness indicators. |
stalenessIndicatorSnoozeUntil | datetime (ISO 8601) | The date and time until which the staleness indicator is hidden for this story in its current step and team backlog. Once the date passes, the indicator is shown again if the story is still stale. |
createdAt | datetime (ISO 8601) | The date and time the story was created. |
updatedAt | datetime (ISO 8601) | The date and time the story was last updated. |
doneAt | datetime (ISO 8601) | The date and time when the story was completed. |
deleted | boolean | Whether the story has been deleted. |
Story relationships
By default, only the type
and id
of each related resource are included in the relationships object.
To retrieve full details for any relationship, use the ?include={relationship}
query parameter.
Field | Type | Description |
---|---|---|
acceptanceCriteria | array of acceptance_criterion | The list of acceptance criteria linked to the story. Use ?include=acceptanceCriteria to retrieve full details. |
assignee | user | The user assigned to the story. Use ?include=assignee to retrieve full details. |
team | team | The team backlog the story is assigned to. Use ?include=team to retrieve full details. |
featureFlag | flag | The feature flag associated with the story. Use ?include=featureFlag to retrieve full details. |
creator | user | The user who created the story. Use ?include=creator to retrieve full details. |
Example JSON for story
story
{
"data": {
"type": "story",
"id": "bb452a54-791c-4e8b-9f69-b16832404b11",
"attributes": {
"title": "Improve Patch Loading Time",
"handle": "STORY-33",
"position": 6,
"content": [
{
"type": "DISPLAY_HTML",
"value": "<p>As a <strong>live performer</strong>, I want the synthesizer patches to load faster so that I can switch between sounds seamlessly during my performance.</p><p></p><p><a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://www.figma.com/design/r8VRBLVeZxyqHquFFEU0LI/Atono-Product-UI---Part-4--Trial--Transact--UX-Feedback--Saved-Filters--Search-...-?node-id=30535-55546&t=PYBuhqU8XqTlMJGZ-1\">Design in Figma</a></p>"
},
{
"type": "TEXT",
"value": "As a "
},
{
"type": "PERSONA",
"value": "live performer"
},
{
"type": "TEXT",
"value": ", I want"
},
{
"type": "TEXT",
"value": " the synthesizer patches to load faster"
},
{
"type": "TEXT",
"value": " so that "
},
{
"type": "TEXT",
"value": "I can switch between sounds seamlessly during my performance."
}
],
"additionalContent": [
{
"type": "DISPLAY_HTML",
"value": "<p><strong>Implementation note:</strong> We're currently using a legacy decompression pipeline. Consider switching to <code>lazy-load</code> modules for better performance.</p><p></p><p><strong>Discussion summary:</strong> We aligned with QA and sound design. Speed was prioritized over transition animations. Follow-up stories may address UX polish.</p>"
}
],
"cycleTimeMode": "NORMAL",
"createdAt": "2024-08-09T23:34:11Z",
"updatedAt": "2025-06-06T20:42:28Z",
"deleted": false
},
"relationships": {
"acceptanceCriteria": {
"data": [
{
"type": "acceptance_criterion",
"id": "dcc6bf21-7f85-4aca-b191-496ee4a6b47a"
},
{
"type": "acceptance_criterion",
"id": "7ab3d7b6-0700-4945-a565-abd34d68f5d1"
},
{
"type": "acceptance_criterion",
"id": "0a8d07e6-7910-48b8-bbff-37d4b6e3b06f"
}
],
"meta": {
"count": 3
}
},
"assignee": {
"links": {
"related": "/api/v1/users/fe4641d7-c72a-4165-904d-89b2ded40916"
},
"data": {
"type": "user",
"id": "fe4641d7-c72a-4165-904d-89b2ded40916"
}
},
"team": {
"links": {
"related": "/api/v1/teams/0cd0c8b8-734f-4c17-a07c-e993b04af480"
},
"data": {
"type": "team",
"id": "0cd0c8b8-734f-4c17-a07c-e993b04af480"
}
},
"featureFlag": {
"links": {
"related": "/api/v1/flags/56338410-4aa2-417c-acf1-eda94d344c5f"
},
"data": {
"type": "flag",
"id": "56338410-4aa2-417c-acf1-eda94d344c5f"
}
},
"creator": {
"links": {
"related": "/api/v1/users/bf60edfc-be09-4fea-8597-33c5b333ce05"
},
"data": {
"type": "user",
"id": "bf60edfc-be09-4fea-8597-33c5b333ce05"
}
}
}
},
"included": [
{
"type": "team",
"id": "0cd0c8b8-734f-4c17-a07c-e993b04af480",
"attributes": {
"name": "Synth Support Squad",
"description": "Engineering team responsible for maintaining, optimizing, and enhancing our virtual synthesizer. They ensure smooth operation and implement new features while providing top-notch user support...",
"createdAt": "2024-07-18T22:49:52Z",
"updatedAt": "2025-02-07T05:52:49Z",
"isPublic": true,
"backlogManagementByOwners": false
},
"relationships": {
"members": {
"links": {
"self": "/api/v1/teams/0cd0c8b8-734f-4c17-a07c-e993b04af480/relationships/members"
},
"data": [
{
"type": "user",
"id": "2edaca9f-b07e-4af1-b425-1f0b6bf69c0a"
},
{
"type": "user",
"id": "bf60edfc-be09-4fea-8597-33c5b333ce05"
},
{
"type": "user",
"id": "fe4641d7-c72a-4165-904d-89b2ded40916"
},
{
"type": "user",
"id": "a0215837-3d34-4e0b-9796-2ec4d8aa9573"
}
],
"meta": {
"count": 4
}
}
}
},
{
"type": "acceptance_criterion",
"id": "dcc6bf21-7f85-4aca-b191-496ee4a6b47a",
"attributes": {
"description": "<strong>Loading Time:</strong> The time to load any patch is reduced to under 2 seconds.",
"position": 0,
"level": 0
},
"meta": {}
},
{
"type": "user",
"id": "bf60edfc-be09-4fea-8597-33c5b333ce05",
"attributes": {
"createdAt": "2024-04-29T16:45:22Z",
"updatedAt": "2025-05-08T20:52:56Z",
"invitedAt": "2025-01-23T22:58:21Z",
"email": "[email protected]",
"fullName": "Max Harmon",
"deleted": false
}
},
{
"type": "flag",
"id": "56338410-4aa2-417c-acf1-eda94d344c5f",
"attributes": {
"key": "improve_patch_loading_time23",
"variants": {
"on": true,
"off": false
},
"createdAt": "2024-08-09T23:35:39Z",
"updatedAt": "2025-05-08T21:36:44Z"
}
},
{
"type": "user",
"id": "fe4641d7-c72a-4165-904d-89b2ded40916",
"attributes": {
"createdAt": "2024-08-10T00:45:55Z",
"updatedAt": "2024-08-10T00:46:58Z",
"invitedAt": "2025-01-23T22:58:21Z",
"email": "[email protected]",
"fullName": "Oliver Resonance",
"deleted": false
}
},
{
"type": "acceptance_criterion",
"id": "0a8d07e6-7910-48b8-bbff-37d4b6e3b06f",
"attributes": {
"description": "<strong>Performance Tested:</strong> The patch loading optimization is tested under high CPU load to ensure stability.",
"position": 2,
"level": 0
},
"meta": {}
},
{
"type": "acceptance_criterion",
"id": "7ab3d7b6-0700-4945-a565-abd34d68f5d1",
"attributes": {
"description": "<strong>No Data Loss:</strong> All patch parameters and settings are preserved accurately after the optimization.",
"position": 1,
"level": 0
},
"meta": {}
}
]
}