openapi: 3.0.0
info:
  title: Memfault API Documentation
  description: |
    # About

    This is the documentation for the Memfault REST API.

    For CI & scripting, we recommend using the [Memfault CLI Tool](https://mflt.io/memfault-cli) which exposes an easy to use interface for a majority of the REST APIs detailed below.

    Linked below are other useful resources:

    - [Firmware SDK Documentation](https://github.com/memfault/memfault-firmware-sdk)
    - [Guide: Data From Firmware To The Cloud](https://mflt.io/2MGMoIl)
    - [Memfault Keyword Terminology](https://mflt.io/terminology)
    - [HTTP Response Status Codes](https://docs.memfault.com/docs/reference/reference-http-response-status-codes#overview)

    # Memfault URLs

    There are four API related URLs that will be used with Memfault's service. The proper use for each is as follows:

    - `api.memfault.com` - Use along with an API Key for normal consumption and use of the API documented below.
    - `chunks.memfault.com` - Use with the **Chunks** API to push chunked data into Memfault.
    - `ingress.memfault.com` - Use with APIs that push data into Memfault, such as **Events** and **Coredumps**.
    - `files.memfault.com` - Use in Continuous Integration systems for uploading large files, such as binaries, symbol files, bugreports, etc.

    # Authentication

    There are four ways to authenticate when interfacing with the Memfault API.

    ## Email + Password

    To test if the Email + Password works, one can try this example request

    ```bash
    curl --user user@example.com:mypassword https://api.memfault.com/auth/me
    ```

    where `user@example.com` is the User's email and `mypassword` is the User's *password*

    ## Email + API Key

    Please refer to the section 'Auth -> Generate User API Key' to learn how to get an API key.
    Once one is generated, the user can authenticate with the email + API key combination using
    Basic Auth.

    To test if the Email + API Key works, one can try this example request

    ```bash
    curl --user user@example.com:123e4567e89b12d3a456426655440000 https://api.memfault.com/auth/me
    ```

    where `user@example.com` is the User's email and `123e4567e89b12d3a456426655440000` is the User's *API Key*

    ## Organization Auth Token

    Organization Auth Tokens allow access of the organization's resources for automation. They can be
    accessed and managed by Administrators at Admin → Organization Auth Tokens in the Memfault UI.

    Organization Auth Tokens use Bearer Authentication.

    To test if the Organization Auth Token works, one can try this example request

    ```bash
    curl --header "Authorization: Bearer oat_123e4567e89b12d3a456426655440000" https://api.memfault.com/api/v0/organizations
    ```

    ## Memfault Project Key

    This is only for use when pushing data into Memfault, or by a **Device** that may have limited memory
    when accessing specific endpoints (such as the Latest Release endpoint).

    > This sort of authentication **will not** work with most API endpoints. API endpoints that accept or
    require this form of authentication will explicitly say so in their specific documentation.

    This enables **Devices** to associate directly to a **Project** instead of with a particular *User*,
    Memfault account, or API Key. It also allows for a shorter URL which doesn't have to specify the
    **Project** or **Organization**. **Devices** can make requests such as:

    ```bash
    curl \
      https://ingress.memfault.com/api/v0/events \
      -H "Memfault-Project-Key: 06e7916f2db44167a1f5196cfe83a898" \
      -H 'Content-Type: application/json' \
      -d '{ ... }'
    ```

    The Memfault Project Key for a **Project** can be found in the Dashboard under *Settings*.

    # Requests

    All API data sent and received is [JSON](https://en.wikipedia.org/wiki/JSON).

    ## Methods

    | Method   | Example Route   | Count  | Description                              |
    |:---------|:----------------|:-------|:-----------------------------------------|
    | `GET`    | `/objects`      | many   | Get a list of the objects                |
    | `GET`    | `/objects/:key` | single | Get a single object                      |
    | `POST`   | `/objects`      | single | Create a single object                   |
    | `PATCH`  | `/objects/:key` | single | Update any number of fields in an object |
    | `PUT`    | `/objects/:key` | single | Create/Update a relationship object      |
    | `DELETE` | `/objects`      | many   | Delete many objects (sent as JSON data)  |
    | `DELETE` | `/objects/:key` | single | Delete a single object                   |

    > NOTE: Not all routes implemented for all types. Please reference the documentation for exact
    routes and features.

    ## Parameters

    Most endpoints with methods of type `POST`, `PATCH`, and `PUT` will accept parameters and data
    in JSON format.

    Header: `Content-Type: application/json`

    ## Query Parameters & Filtering

    Many API endpoints allow filtering of the results through the use of query parameters. These are
    optional and URL encoded. The list of possible parameters are listed under each route. Many of them
    accept list of values, in the following format:

    ex. single **Cohort**
    ```
    /issues?cohort=alpha
    ```

    ex. List of **Cohorts**
    ```
    /issues?cohort=alpha&cohort=beta&cohort=internal
    ```

    Query Parameters that accept lists are denoted by the `[]` signifier after their name in the documentation
    for each endpoint. ex. `cohorts[]`

    ### Timestamps

    When sending timestamps in requests as parameters, such as for `created_date` or `first_seen`,
    ISO 8601 standard with a `Z` is required.

    **Valid for requests:** `2025-02-27T00:00:00Z`

    **Not valid for requests** (will return 'Not a valid datetime'):
    - `2025-02-27`
    - `2025-02-27T00:00:00+00:00`

    ## Sorting

    For all `sort` parameters, you may include `-` to force *Descending* sort, or leave it off to force
    *Ascending* sort.

    The following will sort by `created_date` descending, with the newest entries last.

    `/projects?sort=-created_date`

    The following will sort by `created_date` ascending, with the newest entries first.

    `/projects?sort=created_date`

    ## Pagination

    Pagination works on every endpoint, and the following parameters can be passed in to manipulate
    the page and size of each request.

    | Query String Parameter | Required | Description                                                   |
    |:-----------------------|:---------|:--------------------------------------------------------------|
    | page                   | optional | Page number of the result set (default: 1)                    |
    | per_page               | optional | Limit the number of results per page. (default: 20, max: 100) |

    Example:
    ```
    curl -X GET "https://api.memfault.com/api/v0/organizations/memfault/projects/demo/events?per_page=10&page=2"
    ```

    ## Versions

    All *Versions* are required to be [Semantic Versions](https://semver.org/).

    # Responses

    ## Pagination

    On responses where multiple items could be returned, a `paging` field in the JSON object is returned.

    ```json
    {
      "data": {
        "..."
      },
      "paging": {
        "item_count": 35,
        "page": 1,
        "page_count": 1,
        "per_page": 20,
        "total_count": 35
      }
    }
    ```

    | Field         | Type     | Description                                                     |
    |:--------------|:---------|:----------------------------------------------------------------|
    | `item_count`  | `Number` | Number of items returned in this response                       |
    | `total_count` | `Number` | Number of items total on server that could be returned          |
    | `page`        | `Number` | The current page number                                         |
    | `page_count`  | `Number` | The number of pages that could be returned from the server      |
    | `per_page`    | `Number` | The maximum number of items that will be returned in a response |

    ## Schema

    Timestamps are returned in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.

    `2014-12-22T03:12:58.019077+00:00`

    # Memfault Resources

    The following is a table of all Memfault Resources and their identifiers, URIs, and notes about each of them.

    | Resource        | Identifier Type | API URI                                                                                 | Notes                                           |
    |:----------------|:----------------|:----------------------------------------------------------------------------------------|:------------------------------------------------|
    | Organization    | `slug`          | `/organizations/<organization_slug>`                                                    | Max Length: 128<br />Regex: `[-a-zA-Z0-9_]+`    |
    | Project         | `slug`          | `/organizations/<organization_slug>/projects/<project_slug>`                            | Max Length: 128<br />Regex: `[-a-zA-Z0-9_]+`    |
    | Release         | `slug`          | `/organizations/<organization_slug>/projects/<project_slug>/releases/<release_version>` | Max Length: 128<br />Regex: `[-a-zA-Z0-9_.+]+`  |
    | Cohort          | `slug`          | `/organizations/<organization_slug>/projects/<project_slug>/cohorts/<cohort_slug>`      | Max Length: 128<br />Regex: `[-a-zA-Z0-9_]+`    |
    | Device          | `slug`          | `/organizations/<organization_slug>/projects/<project_slug>/devices/<device_serial>`    | Max Length: 128<br />Regex: `[-a-zA-Z0-9_]+`    |
    | HardwareVersion | `slug`          | N/A                                                                                     | Max Length: 128<br />Regex: `[-a-zA-Z0-9_.+]+`  |
    | Deployment      | `id`            | `/organizations/<organization_slug>/projects/<project_slug>/deployments/<id>`           |                                                 |
    | Event           | `id`            | `/organizations/<organization_slug>/projects/<project_slug>/events/<id>`                |                                                 |
    | Trace           | `id`            | `/organizations/<organization_slug>/projects/<project_slug>/traces/<id>`                |                                                 |
    | Issue           | `id`            | `/organizations/<organization_slug>/projects/<project_slug>/issues/<id>`                |                                                 |
    | Install         | `id`            | `/organizations/<organization_slug>/projects/<project_slug>/installs/<id>`              |                                                 |
  contact: {}
  version: "1.0"
servers:
  - url: https://api.memfault.com
    description: Memfault API
paths:
  /auth/api_key:
    delete:
      tags:
        - Auth
      summary: Reset User API key
      description: Invalidate the previously generated API Key for the logged in **User** and do not create another one
      operationId: ResetUserApiKey
      parameters: []
      responses:
        "204":
          description: ""
          headers: {}
          content:
            text/plain:
              schema:
                type: object
      deprecated: false
    get:
      tags:
        - Auth
      summary: Get User API Key
      description: Get a previously generated API Key for the logged in **User**
      operationId: GetUserApiKey
      parameters: []
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GetUserAPIKey"
              example:
                data:
                  api_key: dbdd9aa9f9e148b5bc1a1cc828bb1d95
      deprecated: false
    post:
      tags:
        - Auth
      summary: Generate User API Key
      description: |-
        Generate (or re-generate) an API Key for logged in **User**.

        To generate this without logging into Memfault, you may use HTTP Basic Auth to call this API.
      operationId: GenerateUserApiKey
      parameters: []
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GenerateUserAPIKey"
              example:
                data:
                  api_key: dbdd9aa9f9e148b5bc1a1cc828bb1d95
      deprecated: false
  /auth/me:
    get:
      tags:
        - Auth
      summary: Me
      description: Return information about the logged in **User**
      operationId: Me
      parameters: []
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Me"
              example:
                created_date: "2019-05-22T04:33:21.472212+00:00"
                email: john@memfault.com
                id: 1
                name: John
                organizations:
                  - id: 1
                    name: Acme, Inc.
                    slug: acme-inc
                updated_date: "2019-05-22T04:33:21.483559+00:00"
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects:
    post:
      tags:
        - Projects
      summary: Create a Project
      description: |-
        Create a **Project** under the given **Organization**

        NOTE: Requires `admin` permission on the **Organization**

        ---

        #### Return Value

        Returns a **Project** Schema
      operationId: CreateAProject
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateAProject"
              example:
                data:
                  api_key: b8e7e2c93e944440b4245e78c9b3e082
                  count_devices: 0
                  created_date: "2019-05-21T21:08:54.32353+00:00"
                  id: 13
                  name: Smart Sink
                  os: FreeRTOS
                  platform: nRF52
                  slug: smart-sink
                  updated_date: "2019-05-21T21:08:54.396858+00:00"
      deprecated: false
    get:
      tags:
        - Projects
      summary: List Projects
      description: |-
        List the **Projects** under a given **Organization**

        ---

        #### Return Value

        Returns a list of **Project** Schemas
      operationId: ListProjects
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListProjects"
              example:
                data:
                  - api_key: b8e7e2c93e944440b4245e78c9b3e082
                    count_devices: 0
                    created_date: "2019-05-21T21:08:54.32353+00:00"
                    id: 13
                    name: Smart Sink
                    os: FreeRTOS
                    platform: nRF52
                    slug: smart-sink
                    updated_date: "2019-05-21T21:08:54.396858+00:00"
                paging:
                  item_count: 1
                  page: 1
                  page_count: 1
                  per_page: 100
                  total_count: 1
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}:
    get:
      tags:
        - Projects
      summary: Retrieve Project
      description: |-
        Retrieve a **Project** under a given **Organization**

        ---

        #### Return Value

        Returns a **Project** Schema
      operationId: RetrieveProject
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RetrieveProject"
              example:
                data:
                  api_key: b8e7e2c93e944440b4245e78c9b3e082
                  count_devices: 0
                  created_date: "2019-05-21T21:08:54.32353+00:00"
                  id: 13
                  name: Smart Sink
                  os: FreeRTOS
                  platform: nRF52
                  slug: smart-sink
                  updated_date: "2019-05-21T21:08:54.396858+00:00"
      deprecated: false
    patch:
      tags:
        - Projects
      summary: Update Project
      description: |-
        Update a **Project** under a given **Organization**

        NOTE: Requires `admin` permission on the **Organization**

        ---

        #### Return Value

        Returns a **Project** Schema
      operationId: UpdateProject
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UpdateProject"
              example:
                data:
                  api_key: b8e7e2c93e944440b4245e78c9b3e082
                  count_devices: 0
                  created_date: "2019-05-21T21:08:54.32353+00:00"
                  id: 13
                  name: Smart Sink
                  os: FreeRTOS-AWS
                  platform: nRF52
                  slug: smart-sink
                  updated_date: "2019-05-21T21:09:41.48637+00:00"
      deprecated: false
    delete:
      tags:
        - Projects
      summary: Delete Project
      description: |-
        Delete a **Project** under a given **Organization**

        NOTE: Requires `admin` permission on the **Organization**

        ---

        #### Return Value

        Returns `204 - No Content`
      operationId: DeleteProject
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "204":
          description: ""
          headers: {}
          content:
            text/plain:
              schema:
                type: object
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/api_key:
    get:
      tags:
        - Projects
      summary: Get Project Client Key
      description: |-
        Return the **Project** Client Key

        ---

        #### Return Value

        ```JSON
        {
          "api_key": "87c2ca9d3ec148ac82034fc2724ff614"
        }
        ```
      operationId: GetProjectClientKey
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GetProjectClientKey"
              example:
                data:
                  api_key: b8e7e2c93e944440b4245e78c9b3e082
      deprecated: false
    post:
      tags:
        - Projects
      summary: Refresh Project Client Key
      description: |-
        Regenerate the **Project** Client Key

        NOTE: This will make all **Devices** that currently send data using the key **stop working**. Please, please please make sure this is what you want to do.

        ---

        #### Return Value

        ```JSON
        {
          "api_key": "87c2ca9d3ec148ac82034fc2724ff614"
        }
        ```
      operationId: RefreshProjectClientKey
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RefreshProjectClientKey"
              example:
                data:
                  api_key: b13aa6db4cc54709957be890eb822221
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/releases/{release_version}/artifacts:
    post:
      tags:
        - Artifacts
      summary: Upload Artifact for Release
      description: |-
        Upload an **Artifact** for the given **Release** and *Hardware Revision*

        ---

        #### Return Value

        Once the entire file is uploaded to Memfault (may take a while), the server will return a `202 Accepted` response and `Location` header for which to check the status of the *Task*.

        ```
        Location: https://api.memfault.com/api/v0/queue/bb992299-f64a-4d47-8372-7e16aff9fdc3
        ```
      operationId: UploadArtifactForRelease
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: release_version
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              required:
                - file
                - type
                - filename
                - hardware_version
              type: object
              properties:
                file:
                  type: string
                  description: multipart encoded file
                type:
                  type: string
                  description: Artifact Type
                  example: firmware OR symbols
                filename:
                  type: string
                  description: Filename of uploaded artifact
                hardware_version:
                  type: string
                  description: Hardware Revision
        required: false
      responses:
        "202":
          description: ""
          headers: {}
          content:
            text/plain:
              schema:
                type: object
                example: {}
              example: {}
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/releases:
    post:
      tags:
        - Releases
      summary: Create a Release
      description: |-
        Create a **Release** for a given **Project**

        NOTE: A **Release** *does not* need to be manually created using this endpoint. If Memfault receives any **Events** from an unknown **Release**, it will *create* one with the appropriate information.

        ---

        #### Return Value

        - Returns a **Release** Schema
        - Returns a `Location` header with a URL for which to upload binaries and symbols to
      operationId: CreateARelease
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateARelease"
              example:
                data:
                  artifacts: []
                  count_devices: 0
                  created_date: "2019-05-21T21:15:08.593624+00:00"
                  extra_info: null
                  id: 113
                  min_version: ""
                  notes: ""
                  revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                  updated_date: "2019-05-21T21:15:08.596886+00:00"
                  version: 1.0.0
      deprecated: false
    get:
      tags:
        - Releases
      summary: List Releases
      description: |-
        List all **Releases** for a given **Project**

        ---

        #### Return Value

        Returns a list of **Release** Schemas
      operationId: ListReleases
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListReleases"
              example:
                data:
                  - artifacts: []
                    count_devices: 0
                    created_date: "2019-05-21T21:15:08.593624+00:00"
                    extra_info: null
                    id: 113
                    min_version: ""
                    notes: ""
                    revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                    updated_date: "2019-05-21T21:15:08.596886+00:00"
                    version: 1.0.0
                paging:
                  item_count: 1
                  page: 1
                  page_count: 1
                  per_page: 100
                  total_count: 1
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/releases/{release_version}:
    get:
      tags:
        - Releases
      summary: Retrieve a Release
      description: |-
        Retrieve a single **Release**

        ---

        #### Return Value

        Returns a **Release** Schema
      operationId: RetrieveARelease
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: release_version
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RetrieveaRelease"
              example:
                data:
                  artifacts: []
                  count_devices: 0
                  created_date: "2019-05-21T21:15:08.593624+00:00"
                  extra_info: null
                  id: 113
                  min_version: ""
                  notes: ""
                  revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                  updated_date: "2019-05-21T21:15:08.596886+00:00"
                  version: 1.0.0
      deprecated: false
    patch:
      tags:
        - Releases
      summary: Update a Release
      description: |-
        Update a single **Release**

        ---

        #### Return Value

        Returns a **Release** Schema
      operationId: UpdateARelease
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: release_version
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UpdateaRelease"
              example:
                data:
                  artifacts: []
                  count_devices: 0
                  created_date: "2019-05-21T21:26:55.207463+00:00"
                  extra_info: null
                  id: 7
                  min_version: ""
                  notes: ""
                  revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                  updated_date: "2019-05-21T21:26:55.209415+00:00"
                  version: 1.0.0
      deprecated: false
    delete:
      tags:
        - Releases
      summary: Delete a Release
      description: |-
        Delete a single **Release**

        ---

        #### Return Value

        Returns `204 - No Content`
      operationId: DeleteARelease
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: release_version
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "204":
          description: ""
          headers: {}
          content:
            text/plain:
              schema:
                type: object
      deprecated: false
  /api/v0/releases/latest:
    get:
      tags:
        - Releases
      summary: Retrieve Latest Release for a Device
      description: |-
        For a given **Device** (*Device Unique Identifier* and *Hardware Version*), return the latest **Release** that should be installed.

        | Query Parameter                          | Type     | Description                                                                                                |
        |:-----------------------------------------|:---------|:-----------------------------------------------------------------------------------------------------------|
        | `hardware_version` <br />**Required**    | `String` | Hardware Version of the **Device**                                                                         |
        | `software_type` <br />**Required**       | `String` | Software Type being looked up for the **Device**                                                           |
        | `current_version` <br />**Suggested**    | `String` | The **Software Version** that the **Device** is currently running (used for hopping through versions)      |
        | `device_serial` <br />**Required**       | `String` | The **Device** serial to identify a particular device (used for determining the **Cohort**)                |

        NOTE: This endpoint *requires* that the sender use a custom HTTP header defining the Memfault Project Client Key.

        `Memfault-Project-Key: 87c2ca9d3ec148ac82034fc2724ff614`

        Note: More details about version nomenclature can be found [here](https://mflt.io/34PyNGQ).

        ---

        #### Return Value

        - `200 Ok` — Returns a **Release** Schema if an update is available. The artifact URL(s) contained within will be direct links to OTA payloads served from Memfault's CDN. These URLs have an expiry of 6 hours.
        - `204 No Content` — No new release available for the given device.
        - `400 Bad Request` — `hardware_version` or `software_type` don't exist, or `device_serial` is missing.
        - `403 Unauthorized` — Project Key is missing or invalid.
        - `503 Service Unavailable` — Retry after the interval specified in the `Retry-After` response header.
      operationId: RetrieveLatestReleaseForADevice
      parameters:
        - name: Memfault-Project-Key
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: 87c2ca9d3ec148ac82034fc2724ff614
      responses:
        "200":
          description: ""
          headers: {}
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/cohorts:
    post:
      tags:
        - Cohorts
      summary: Create a Cohort
      description: |-
        Create a **Cohort** for the given **Project**

        ---

        #### Return Value

        Returns a **Cohort** Schema
      operationId: CreateACohort
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateACohort"
              example:
                data:
                  count_devices: 0
                  created_date: "2019-05-21T21:55:34.349088+00:00"
                  id: 7
                  last_deployment: null
                  name: Internal Channel
                  slug: internal
                  updated_date: "2019-05-21T21:55:34.349106+00:00"
      deprecated: false
    get:
      tags:
        - Cohorts
      summary: List Cohorts
      description: |-
        List all **Cohorts** for the given **Project**

        ---

        #### Return Value

        Returns a list of **Cohort** Schemas
      operationId: ListCohorts
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListCohorts"
              example:
                data:
                  - count_devices: 0
                    created_date: "2019-05-21T21:26:48.477897+00:00"
                    id: 5
                    last_deployment: null
                    name: default
                    slug: default
                    updated_date: "2019-05-21T21:26:48.477903+00:00"
                  - count_devices: 0
                    created_date: "2019-05-21T21:55:34.349088+00:00"
                    id: 7
                    last_deployment: null
                    name: Internal Channel
                    slug: internal
                    updated_date: "2019-05-21T21:55:34.349106+00:00"
                paging:
                  item_count: 2
                  page: 1
                  page_count: 1
                  per_page: 100
                  total_count: 2
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/cohorts/{cohort_slug}:
    get:
      tags:
        - Cohorts
      summary: Retrieve a Cohort
      description: |-
        Retrieve a single **Cohort**

        ---

        #### Return Value

        Returns a **Cohort** Schema
      operationId: RetrieveACohort
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: cohort_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RetrieveaCohort"
              example:
                data:
                  count_devices: 0
                  created_date: "2019-05-21T21:55:34.349088+00:00"
                  id: 7
                  last_deployment: null
                  name: Internal Channel
                  slug: internal
                  updated_date: "2019-05-21T21:55:34.349106+00:00"
      deprecated: false
    patch:
      tags:
        - Cohorts
      summary: Update a Cohort
      description: |-
        Update a single **Cohort**

        ---

        #### Return Value

        Returns a **Cohort** Schema
      operationId: UpdateACohort
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: cohort_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UpdateaCohort"
              example:
                data:
                  count_devices: 0
                  created_date: "2019-05-21T21:55:34.349088+00:00"
                  id: 7
                  last_deployment: null
                  name: Internal Group
                  slug: internal
                  updated_date: "2019-05-21T22:03:48.302371+00:00"
      deprecated: false
    delete:
      tags:
        - Cohorts
      summary: Delete a Cohort
      description: |-
        Delete a single **Cohort**

        ---

        #### Return Value

        Returns `204 - No Content`
      operationId: DeleteACohort
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: cohort_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "204":
          description: ""
          headers: {}
          content:
            text/plain:
              schema:
                type: object
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/cohorts/{cohort_slug}/devices:
    get:
      tags:
        - Cohorts
      summary: List Devices in a Cohort
      description: |-
        List the **Devices** in the given **Cohort**

        ---

        #### Return Value

        Returns a list of **Device** Schemas
      operationId: ListDevicesInACohort
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: cohort_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListDevicesinaCohort"
              example:
                data:
                  - cohort:
                      count_devices: 1
                      id: 7
                      name: Internal Group
                      slug: internal
                    created_date: "2019-05-21T22:08:17.289061+00:00"
                    device_serial: ABCD1234
                    hardware_version: evt
                    id: 35
                    last_seen: null
                    last_seen_release: null
                    latest_install: null
                    latest_trace: null
                    owner_ref: user1234
                    updated_date: "2019-05-21T22:11:55.900182+00:00"
                paging:
                  item_count: 1
                  page: 1
                  page_count: 1
                  per_page: 100
                  total_count: 1
      deprecated: false
    patch:
      tags:
        - Cohorts
      summary: Move Devices to a Cohort
      description: |-
        Move **Devices** to the given **Cohort**

        NOTE: This will remove the **Devices** from their previous **Cohort**.

        NOTE: The request is processed **asynchronously**.

        ---

        #### Return Value

        Returns `202 - Accepted`
      operationId: MoveDevicesToACohort
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: cohort_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "202":
          description: Accepted
          headers: {}
          content:
            text/plain:
              schema:
                type: object
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/deployments:
    post:
      tags:
        - Deployments
      summary: Create a Deployment
      description: |-
        **Deploy** the given **Release** to the given **Cohort**

        ---

        #### Return Value

        Returns a **Deployment** Schema
      operationId: CreateADeployment
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateADeployment"
              example:
                data:
                  cohort:
                    count_devices: 1
                    id: 7
                    name: Internal Group
                    slug: internal
                  created_date: "2019-05-21T22:49:23.851977+00:00"
                  deployed_date: "2019-05-21T22:49:23.851977+00:00"
                  deployer:
                    email: tyler@memfault.com
                    id: 1
                    name: John
                  extra_info: null
                  id: 9
                  release:
                    id: 8
                    revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                    version: 1.0.0
                  rollout_percent: 0
                  status: done
                  type: normal
                  updated_date: "2019-05-21T22:49:23.851983+00:00"
      deprecated: false
    get:
      tags:
        - Deployments
      summary: List Deployments
      description: |-
        List all **Deployments** for the given **Project**

        ---

        #### Return Value

        Returns a list of **Deployment** Schemas
      operationId: ListDeployments
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListDeployments"
              example:
                data:
                  - cohort:
                      count_devices: 1
                      id: 7
                      name: Internal Group
                      slug: internal
                    created_date: "2019-05-21T22:49:23.851977+00:00"
                    deployed_date: "2019-05-21T22:49:23.851977+00:00"
                    deployer:
                      email: tyler@memfault.com
                      id: 1
                      name: John
                    extra_info: null
                    id: 9
                    release:
                      id: 8
                      revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                      version: 1.0.0
                    rollout_percent: 0
                    status: done
                    type: normal
                    updated_date: "2019-05-21T22:49:23.851983+00:00"
                paging:
                  item_count: 1
                  page: 1
                  page_count: 1
                  per_page: 100
                  total_count: 1
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/deployments/{deployment_id}:
    get:
      tags:
        - Deployments
      summary: Retrieve a Deployment
      description: |-
        Retrieve a single **Deployment**

        ---

        #### Return Value

        Returns a **Deployment** Schema
      operationId: RetrieveADeployment
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: deployment_id
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RetrieveaDeployment"
              example:
                data:
                  cohort:
                    count_devices: 1
                    id: 7
                    name: Internal Group
                    slug: internal
                  created_date: "2019-05-21T22:49:23.851977+00:00"
                  deployed_date: "2019-05-21T22:49:23.851977+00:00"
                  deployer:
                    email: tyler@memfault.com
                    id: 1
                    name: John
                  extra_info: null
                  id: 9
                  release:
                    id: 8
                    revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                    version: 1.0.0
                  rollout_percent: 0
                  status: done
                  type: normal
                  updated_date: "2019-05-21T22:49:23.851983+00:00"
      deprecated: false
    patch:
      tags:
        - Deployments
      summary: Update a Deployment
      description: |-
        Update a single **Deployment**

        ---

        #### Return Value

        Returns a **Deployment** Schema
      operationId: UpdateADeployment
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: deployment_id
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UpdateaDeployment"
              example:
                data:
                  cohort:
                    count_devices: 1
                    id: 7
                    name: Internal Group
                    slug: internal
                  created_date: "2019-05-21T22:49:23.851977+00:00"
                  deployed_date: "2019-05-21T22:49:23.851977+00:00"
                  deployer:
                    email: tyler@memfault.com
                    id: 1
                    name: John
                  extra_info:
                    ci: jenkins
                  id: 9
                  release:
                    id: 8
                    revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                    version: 1.0.0
                  rollout_percent: 0
                  status: done
                  type: normal
                  updated_date: "2019-05-21T22:50:57.591108+00:00"
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/devices:
    post:
      tags:
        - Devices
      summary: Create Devices
      description: |-
        Create a single **Device** for a given **Project**

        NOTE: A **Device** *does not* need to be manually created using this endpoint. If Memfault receives any **Events** from an unknown **Device**, it will *create* one with the appropriate information.

        ---

        #### Return Value

        A `202 Accepted` response and `Location` header for which to check the status of the *Task*.

        ```
        Location: https://api.memfault.com/api/v0/queue/bb992299-f64a-4d47-8372-7e16aff9fdc3
        ```
      operationId: CreateDevices
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateSingleDevice"
              example:
                data:
                  cohort:
                    count_devices: 1
                    id: 7
                    name: Internal Group
                    slug: internal
                  created_date: "2019-05-21T22:08:17.289061+00:00"
                  device_serial: ABCD1234
                  hardware_version: evt
                  id: 35
                  last_seen: null
                  last_seen_release: null
                  latest_install: null
                  latest_trace: null
                  owner_ref: ""
                  updated_date: "2019-05-21T22:08:17.296289+00:00"
      deprecated: false
    get:
      tags:
        - Devices
      summary: List Devices
      description: |-
        List all **Devices** for a given **Project**

        ---

        #### Return Value

        Returns a list of **Device** Schemas
      operationId: ListDevices
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListDevices"
              example:
                data:
                  - cohort:
                      count_devices: 1
                      id: 7
                      name: Internal Group
                      slug: internal
                    created_date: "2019-05-21T22:08:17.289061+00:00"
                    device_serial: ABCD1234
                    hardware_version: evt
                    id: 35
                    last_seen: null
                    last_seen_release: null
                    latest_install: null
                    latest_trace: null
                    owner_ref: ""
                    updated_date: "2019-05-21T22:08:17.296289+00:00"
                paging:
                  item_count: 1
                  page: 1
                  page_count: 1
                  per_page: 100
                  total_count: 1
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/devices/{device_serial}:
    get:
      tags:
        - Devices
      summary: Retrieve a Device
      description: |-
        Retrieve a single **Device**

        ---

        #### Return Value

        Returns a **Device** Schema
      operationId: RetrieveADevice
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: device_serial
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RetrieveaDevice"
              example:
                data:
                  cohort:
                    count_devices: 1
                    id: 7
                    name: Internal Group
                    slug: internal
                  created_date: "2019-05-21T22:08:17.289061+00:00"
                  device_serial: ABCD1234
                  hardware_version: evt
                  id: 35
                  last_seen: null
                  last_seen_release: null
                  latest_install: null
                  latest_trace: null
                  owner_ref: user1234
                  updated_date: "2019-05-21T22:11:55.900182+00:00"
      deprecated: false
    patch:
      tags:
        - Devices
      summary: Update a Device
      description: |-
        Update a single **Device**

        ---

        #### Return Value

        Returns a **Device** Schema
      operationId: UpdateADevice
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: device_serial
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UpdateaDevice"
              example:
                data:
                  cohort:
                    count_devices: 1
                    id: 7
                    name: Internal Group
                    slug: internal
                  created_date: "2019-05-21T22:08:17.289061+00:00"
                  device_serial: ABCD1234
                  hardware_version: evt
                  id: 35
                  last_seen: null
                  last_seen_release: null
                  latest_install: null
                  latest_trace: null
                  owner_ref: user1234
                  updated_date: "2019-05-21T22:11:55.900182+00:00"
      deprecated: false
    delete:
      tags:
        - Devices
      summary: Delete a Device
      description: |-
        Delete a single **Device**

        ---

        #### Return Value

        Returns `204 - No Content`
      operationId: DeleteADevice
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: device_serial
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "204":
          description: ""
          headers: {}
          content:
            text/plain:
              schema:
                type: object
      deprecated: false
  /api/v0/events:
    post:
      tags:
        - Events
      summary: Upload Events
      description: "Upload many **Events** for a given **Project**\n\nNOTE: This endpoint *requires* that the sender use a custom HTTP header defining the Memfault Project Client Key. \n\n`Memfault-Project-Key: 87c2ca9d3ec148ac82034fc2724ff614`\n\n---\n\n# Return Value\n\nA `202 Accepted` response and `Location` header for which to check the status of the *Task*.\n\n```\nLocation: https://api.memfault.com/api/v0/queue/bb992299-f64a-4d47-8372-7e16aff9fdc3\n```"
      operationId: UploadEvents
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: Memfault-Project-Key
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "202":
          description: ""
          headers: {}
          content:
            text/plain:
              schema:
                type: object
                example: {}
              example: {}
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UploadEvents-InvalidSchema"
              example:
                error:
                  code: 1000
                  http_code: 400
                  message:
                    "0":
                      event_info:
                        metrics:
                          uptime_s:
                            value:
                              - Not a valid integer.
                  type: InvalidUsageError
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/issues:
    get:
      tags:
        - Issues
      summary: List Issues
      description: |-
        List all **Issues** for a given **Project**

        ---

        #### Return Value

        Returns a list of **Issue** Schemas
      operationId: ListIssues
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListIssues"
              example:
                data:
                  - counts:
                      - 10
                      - 11
                      - 15
                      - 10
                      - 10
                      - 11
                      - 12
                      - 6
                      - 5
                      - 15
                      - 11
                      - 10
                      - 13
                      - 12
                      - 15
                      - 5
                      - 4
                      - 10
                      - 7
                      - 5
                      - 4
                      - 11
                      - 15
                      - 14
                    created_date: "2019-05-21T22:32:58.168618+00:00"
                    device_count: 1
                    distribution:
                      hardware_version:
                        - count: 13
                          version: qq_pvt
                        - count: 9
                          version: xx_evt
                      sw_version:
                        - count: 13
                          version: "0.9"
                        - count: 7
                          version: 1.0.0
                        - count: 9
                          version: 1.0.1
                    first_release:
                      id: 8
                      revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                      version: 1.0.0
                    first_seen: "2019-05-21T22:32:57.801998+00:00"
                    id: 11
                    last_release:
                      id: 8
                      revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                      version: 1.0.0
                    last_seen: "2019-05-21T22:32:57.801998+00:00"
                    last_trace:
                      captured_date: "2019-05-21T22:32:57.801998+00:00"
                      context: ""
                      created_date: "2019-05-21T22:32:57.801961+00:00"
                      device:
                        device_serial: ABCD1234
                        hardware_version: evt
                        id: 35
                      entries:
                        threads:
                          - crashed: false
                            current: true
                            registers: []
                            reporting: false
                            stacktrace:
                              - address: 226689
                                context: []
                                file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_ram_reboot_info_tracking.c
                                function: memfault_reboot_tracking_mark_crash
                                index: 0
                                lineno: 85
                              - address: 226574
                                context: []
                                file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_fault_handling.c
                                function: memfault_reboot_tracking_assert_handler
                                index: 1
                                lineno: 171
                            state: unknown
                            tid: 1
                      id: 20
                      message: ""
                      reason: Assert
                      received_date: "2019-05-21T22:32:57.801994+00:00"
                      release:
                        id: 8
                        revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                        version: 1.0.0
                      signature: 853ff579aabced352bc77dc85f481660545f78e2a27974e62a26b23b71ffe3a2
                      source_type: event
                      title: Assert at memfault_reboot_tracking_assert_handler
                    message: ""
                    resolution: null
                    signature: 853ff579aabced352bc77dc85f481660545f78e2a27974e62a26b23b71ffe3a2
                    status: open
                    title: Assert at memfault_reboot_tracking_assert_handler
                    trace_count: 1
                    updated_date: "2019-05-21T22:32:58.168622+00:00"
                paging:
                  item_count: 1
                  page: 1
                  page_count: 1
                  per_page: 100
                  total_count: 1
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/issues/{issue_id}:
    get:
      tags:
        - Issues
      summary: Retrieve an Issue
      description: |-
        Retrieve a single **Issue**

        ---

        #### Return Value

        Returns an **Issue** Schema
      operationId: RetrieveAnIssue
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: issue_id
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RetrieveanIssue"
              example:
                data:
                  counts:
                    - 10
                    - 11
                    - 15
                    - 10
                    - 10
                    - 11
                    - 12
                    - 6
                    - 5
                    - 15
                    - 11
                    - 10
                    - 13
                    - 12
                    - 15
                    - 5
                    - 4
                    - 10
                    - 7
                    - 5
                    - 4
                    - 11
                    - 15
                    - 14
                  created_date: "2019-05-21T22:32:58.168618+00:00"
                  device_count: 1
                  distribution:
                    hardware_version:
                      - count: 13
                        version: qq_pvt
                      - count: 9
                        version: xx_evt
                    sw_version:
                      - count: 13
                        version: "0.9"
                      - count: 7
                        version: 1.0.0
                      - count: 9
                        version: 1.0.1
                  first_release:
                    id: 8
                    revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                    version: 1.0.0
                  first_seen: "2019-05-21T22:32:57.801998+00:00"
                  id: 11
                  last_release:
                    id: 8
                    revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                    version: 1.0.0
                  last_seen: "2019-05-21T22:32:57.801998+00:00"
                  last_trace:
                    captured_date: "2019-05-21T22:32:57.801998+00:00"
                    context: ""
                    created_date: "2019-05-21T22:32:57.801961+00:00"
                    device:
                      device_serial: ABCD1234
                      hardware_version: evt
                      id: 35
                    entries:
                      threads:
                        - crashed: false
                          current: true
                          registers: []
                          reporting: false
                          stacktrace:
                            - address: 226689
                              context: []
                              file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_ram_reboot_info_tracking.c
                              function: memfault_reboot_tracking_mark_crash
                              index: 0
                              lineno: 85
                            - address: 226574
                              context: []
                              file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_fault_handling.c
                              function: memfault_reboot_tracking_assert_handler
                              index: 1
                              lineno: 171
                          state: unknown
                          tid: 1
                    id: 20
                    message: ""
                    reason: Assert
                    received_date: "2019-05-21T22:32:57.801994+00:00"
                    release:
                      id: 8
                      revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                      version: 1.0.0
                    signature: 853ff579aabced352bc77dc85f481660545f78e2a27974e62a26b23b71ffe3a2
                    source_type: event
                    title: Assert at memfault_reboot_tracking_assert_handler
                  message: ""
                  resolution: null
                  signature: 853ff579aabced352bc77dc85f481660545f78e2a27974e62a26b23b71ffe3a2
                  status: open
                  title: Assert at memfault_reboot_tracking_assert_handler
                  trace_count: 1
                  updated_date: "2019-05-21T22:32:58.168622+00:00"
      deprecated: false
    patch:
      tags:
        - Issues
      summary: Update an Issue
      description: |-
        Update a single **Issue**

        ---

        #### Return Value

        Returns a **Issue** Schema
      operationId: UpdateAnIssue
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: issue_id
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: integer
    delete:
      tags:
        - Issues
      summary: Delete an Issue
      description: |-
        Delete a single **Issue**

        ---

        #### Return Value

        Returns `204 - No Content`
      operationId: DeleteAnIssue
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: issue_id
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "204":
          description: ""
          headers: {}
          content:
            text/plain:
              schema:
                type: object
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/installs:
    get:
      tags:
        - Installs
      summary: List Installs
      description: |-
        List all **Installs** for a given **Project**

        ---

        #### Return Value

        Returns a list of **Install** Schemas
      operationId: ListInstalls
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListInstalls"
              example:
                data:
                  - began_at: "2019-05-21T22:19:57.762973+00:00"
                    created_date: "2019-05-21T22:19:57.762973+00:00"
                    device:
                      device_serial: ABCD1234
                      hardware_version: evt
                      id: 35
                    id: 53
                    release:
                      id: 8
                      revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                      version: 1.0.0
                    status: success
                    transitioned_at: "2019-05-21T22:19:57.771497+00:00"
                    updated_date: "2019-05-21T22:19:57.778679+00:00"
                paging:
                  item_count: 1
                  page: 1
                  page_count: 1
                  per_page: 100
                  total_count: 1
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/installs/{install_id}:
    get:
      tags:
        - Installs
      summary: Retrieve an Install
      description: |-
        Retrieve a single **Install**

        ---

        #### Return Value

        Returns an **Install** Schema
      operationId: RetrieveAnInstall
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: install_id
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RetrieveanInstall"
              example:
                data:
                  began_at: "2019-05-21T22:19:57.762973+00:00"
                  created_date: "2019-05-21T22:19:57.762973+00:00"
                  device:
                    device_serial: ABCD1234
                    hardware_version: evt
                    id: 35
                  id: 53
                  release:
                    id: 8
                    revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                    version: 1.0.0
                  status: success
                  transitioned_at: "2019-05-21T22:19:57.771497+00:00"
                  updated_date: "2019-05-21T22:19:57.778679+00:00"
      deprecated: false
    delete:
      tags:
        - Installs
      summary: Delete an Install
      description: |-
        Delete a single **Install**

        ---

        #### Return Value

        Returns `204 - No Content`
      operationId: DeleteAnInstall
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: install_id
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "204":
          description: ""
          headers: {}
          content:
            text/plain:
              schema:
                type: object
      deprecated: false
  /api/v0/queue/{task_Id}:
    get:
      tags:
        - Tasks
      summary: Get Task Status
      description: |-
        Get the status of the given *Task*

        ---

        #### Return Value

        ```
        {
          "status": "SUCCESS"
        }
        ```
      operationId: GetTaskStatus
      parameters:
        - name: task_Id
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/data-routes:
    get:
      tags:
        - Projects
      summary: Get Project Keys (Data Routes)
      description: |-
        Returns all **Project Keys** (Data Routes) for the given **Project**.

        ---

        #### Return Value

        Returns a list of Project Key objects, each with `id`, `token`, `description`,
        `created_date`, `updated_date`, `cohort_override`, and `deactivated_date`.
      operationId: GetProjectDataRoutes
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                type: object
              example:
                data:
                  - id: 15
                    token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                    description: ""
                    created_date: "2021-01-01T00:00:00+00:00"
                    updated_date: "2021-01-01T00:00:00+00:00"
                    cohort_override: null
                    deactivated_date: null
                paging:
                  total_count: 1
                  item_count: 1
                  per_page: 20
                  page: 1
                  page_count: 1
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/devices/{device_serial}/attributes:
    get:
      tags:
        - Devices
      summary: Retrieve Device Attributes
      description: |-
        Retrieve **Device Attributes** for a given **Device**.

        ---

        #### Query Parameters

        | Parameter | Type   | Description                                                                               |
        |:----------|:-------|:------------------------------------------------------------------------------------------|
        | `q`       | String | Search string (wildcard `*` supported) to filter attributes by `string_key`.             |

        #### Return Value

        Returns a list of **Device Attributes** Schemas.
      operationId: RetrieveDeviceAttributes
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: device_serial
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: q
          in: query
          description: Search string (wildcard * supported) to filter attributes by string_key
          required: false
          style: form
          explode: true
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                type: object
      deprecated: false
    patch:
      tags:
        - Devices
      summary: Update Device Attributes
      description: |-
        Update one or more **Device Attributes** for a given **Device**.

        ---

        #### Return Value

        Returns empty response on success.
      operationId: UpdateDeviceAttributes
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: device_serial
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/software_types:
    get:
      tags:
        - Artifacts
      summary: List Software Types
      description: |-
        List all **Software Types** for a given **Project**.

        ---

        #### Return Value

        Returns a list of **Software Type** Schemas.
      operationId: ListSoftwareTypes
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                type: object
      deprecated: false
    post:
      tags:
        - Artifacts
      summary: Create Software Type
      description: |-
        Create a **Software Type** for a given **Project**.

        NOTE: A **Device** *does not* need to be manually created using this endpoint.
        **Software Types** are created automatically when a **Software Version** is uploaded.

        ---

        #### Return Value

        Returns a **Software Type** Schema.
      operationId: CreateSoftwareType
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                type: object
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/software_types/{software_type_slug}:
    get:
      tags:
        - Artifacts
      summary: Retrieve a Software Type
      description: |-
        Retrieve a single **Software Type** for a given **Project**.

        ---

        #### Return Value

        Returns a **Software Type** Schema.
      operationId: RetrieveASoftwareType
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: software_type_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                type: object
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/software_types/{software_type_slug}/software_versions:
    get:
      tags:
        - Artifacts
      summary: List Software Versions
      description: |-
        List all **Software Versions** for a given **Software Type** and **Project**.

        ---

        #### Return Value

        Returns a list of **Software Version** Schemas.
      operationId: ListSoftwareVersions
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: software_type_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                type: object
      deprecated: false
    post:
      tags:
        - Artifacts
      summary: Create Software Version
      description: |-
        Create a **Software Version** for a given **Software Type** and **Project**.

        NOTE: A **Software Version** *does not* need to be manually created using this endpoint.
        **Software Versions** are created automatically when a symbol file or OTA payload is uploaded.

        ---

        #### Return Value

        Returns a **Software Version** Schema.
      operationId: CreateSoftwareVersion
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: software_type_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                type: object
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/software_types/{software_type_slug}/software_versions/{version}:
    get:
      tags:
        - Artifacts
      summary: Retrieve a Software Version
      description: |-
        Retrieve a **Software Version** for a given **Software Type** and **Project**.

        ---

        #### Return Value

        Returns a **Software Version** Schema.
      operationId: RetrieveASoftwareVersion
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: software_type_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: version
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                type: object
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/sboms:
    post:
      tags:
        - Artifacts
      summary: Attach SBOM
      description: |-
        Attach a Software Bill of Materials (SBOM) to a **Project**.

        ---

        #### Return Value

        Returns the created SBOM object.
      operationId: AttachSBOM
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                type: object
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/sboms/{sbom_id}/download:
    get:
      tags:
        - Artifacts
      summary: Download SBOM
      description: |-
        Download a previously attached SBOM for a given **Project**.

        ---

        #### Return Value

        Returns the SBOM file.
      operationId: DownloadSBOM
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: sbom_id
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: ""
          headers: {}
      deprecated: false
  /api/v0/upload/trace-import:
    post:
      tags:
        - Upload
      summary: Upload Trace
      description: |-
        Import a new **Trace** for a given **Project**.

        Requires `Memfault-Project-Key` header authentication.

        The request body is a JSON object describing the trace. Key fields include:

        | Field | Type | Description |
        |:------|:-----|:------------|
        | `device_serial` | String | **Required.** The device serial number. |
        | `hardware_version` | String | **Required.** Hardware version of the device. |
        | `software_version` | String | **Required.** Software version running on the device. |
        | `software_type` | String | **Required.** Software type. |
        | `reason` | String | Reason for the trace (e.g. `Assert`, `HardFault`). |
        | `captured_date` | String | ISO 8601 timestamp when the trace was captured. |
        | `processes` | Array | List of process objects (each with `pid`, `name`, `threads`). |
        | `threads` | Array | List of thread objects with registers and stackframes. |

        Each stackframe may include `frame_type`, `map_build_id`, `map_name`, `relative_address`, `abs_address`, `function`, `file`, `lineno`.

        ---

        #### Return Value

        Returns `202 - Accepted`. The trace is processed asynchronously.
      operationId: UploadTrace
      parameters:
        - name: Memfault-Project-Key
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "202":
          description: Accepted
          headers: {}
      deprecated: false
  /api/v0/chunks/{device_serial}:
    post:
      tags:
        - Upload
      summary: Upload Chunk
      description: |-
        Upload one or more **Chunks** for a given **Device** to `chunks.memfault.com`.

        Chunks must be sent in sequential order. The device serial is used to identify the device.

        **Single chunk upload:**

        Use `Content-Type: application/octet-stream` with `Content-Length` required.
        Chunks can be Base64-encoded by adding `Content-Encoding: base64`.

        **Multiple chunks upload:**

        Use `Content-Type: multipart/mixed; boundary=<boundary>` to send multiple chunks in one request.

        ```
        POST /api/v0/chunks/{device_serial}
        Content-Type: multipart/mixed; boundary=boundary_value

        --boundary_value
        Content-Type: application/octet-stream
        Content-Length: <chunk_size>

        <chunk_data>
        --boundary_value--
        ```

        ---

        #### Return Value

        - `202 Accepted` — Chunks queued for processing.
        - `400 Bad Request` — Malformed request.
        - `403 Forbidden` — Project Key missing or invalid.
        - `411 Length Required` — `Content-Length` header missing.
        - `413 Payload Too Large` — Chunk exceeds maximum size.
        - `415 Unsupported Media Type` — Unsupported `Content-Type`.
        - `429 Too Many Requests` — Rate limited; retry after the `Retry-After` header interval.
        - `503 Service Unavailable` — Retry after the `Retry-After` header interval.
      operationId: UploadChunk
      parameters:
        - name: Memfault-Project-Key
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: device_serial
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      servers:
        - url: https://chunks.memfault.com
      responses:
        "202":
          description: Accepted
          headers: {}
      deprecated: false
  /api/v0/upload:
    post:
      tags:
        - Upload
      summary: Prepare Upload (using Project Key)
      description: |-
        Prepare a file upload to `files.memfault.com`. This is **step 1** of a two-step upload flow.

        Returns a signed `upload_url` and an opaque `token`. Use the `upload_url` to PUT the file
        directly, then use the `token` in the corresponding Commit endpoint.

        ---

        #### Request Body

        | Field | Type | Description |
        |:------|:-----|:------------|
        | `kind` | String | **Required.** One of: `COREDUMP`, `ANDROID_BUG_REPORT`, `MAR` |
        | `device` | Object | **Required.** DeviceTraits object (see below) |
        | `size` | Integer | **Required.** File size in bytes |

        **DeviceTraits:**

        | Field | Type | Description |
        |:------|:-----|:------------|
        | `device_serial` | String | **Required.** Device serial number |
        | `hardware_version` | String | **Required.** Hardware version |
        | `software_version` | String | **Required.** Software version |
        | `software_type` | String | Software type |

        ---

        #### Return Value

        Returns `{ "data": { "upload_url": "...", "token": "..." } }`
      operationId: PrepareUploadProjectKey
      parameters:
        - name: Memfault-Project-Key
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
      servers:
        - url: https://files.memfault.com
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                type: object
              example:
                data:
                  upload_url: https://files.memfault.com/...
                  token: eyJ...
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/upload:
    post:
      tags:
        - Upload
      summary: Prepare Upload (Basic Auth)
      description: |-
        Prepare a file upload to `files.memfault.com` using Basic Auth. This is **step 1** of a two-step upload flow.

        This endpoint is the same as `POST /api/v0/upload`, except it uses Basic Auth instead of
        the `Memfault-Project-Key` header.

        Returns a signed `upload_url` and an opaque `token`. Use the `upload_url` to PUT the file
        directly, then use the `token` in the corresponding Commit endpoint.

        ---

        #### Return Value

        Returns `{ "data": { "upload_url": "...", "token": "..." } }`
      operationId: PrepareUploadBasicAuth
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      servers:
        - url: https://files.memfault.com
      responses:
        "200":
          description: ""
          headers: {}
          content:
            application/json:
              schema:
                type: object
              example:
                data:
                  upload_url: https://files.memfault.com/...
                  token: eyJ...
      deprecated: false
  /api/v0/upload/coredump:
    post:
      tags:
        - Upload
      summary: Commit Coredump
      description: |-
        Process a *Coredump* for a given **Project** after it has been uploaded using
        `POST /api/v0/upload` (step 1). Upon successful processing, it will be converted into a **Trace**.

        Requires `Memfault-Project-Key` header authentication.

        ---

        #### Request Body

        | Field | Type | Description |
        |:------|:-----|:------------|
        | `file` | Object | **Required.** `{ "token": "<opaque token from Prepare Upload>" }` |

        ---

        #### Return Value

        Returns `202 - Accepted`. Processing is asynchronous.
      operationId: CommitCoredump
      parameters:
        - name: Memfault-Project-Key
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
      servers:
        - url: https://files.memfault.com
      requestBody:
        description: ""
        content:
          application/json:
            schema:
              type: object
            example:
              file:
                token: eyJ...
        required: true
      responses:
        "202":
          description: Accepted
          headers: {}
      deprecated: false
  /api/v0/upload/bugreport:
    post:
      tags:
        - Upload
      summary: Commit Bugreport
      description: |-
        Process an Android Bug Report for a given **Project** after it has been uploaded using
        `POST /api/v0/upload` (step 1).

        Also see the [detailed, step-by-step guide on uploading Android Bugreports](https://mflt.io/34PvTBz).

        Requires `Memfault-Project-Key` header authentication.

        ---

        #### Request Body

        | Field | Type | Description |
        |:------|:-----|:------------|
        | `file` | Object | **Required.** `{ "token": "<opaque token from Prepare Upload>" }` |

        ---

        #### Return Value

        Returns `202 - Accepted`. Processing is asynchronous.
      operationId: CommitBugreport
      parameters:
        - name: Memfault-Project-Key
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
      servers:
        - url: https://files.memfault.com
      requestBody:
        description: ""
        content:
          application/json:
            schema:
              type: object
            example:
              file:
                token: eyJ...
        required: true
      responses:
        "202":
          description: Accepted
          headers: {}
      deprecated: false
  /api/v0/upload/mar:
    post:
      tags:
        - Upload
      summary: Commit MAR File
      description: |-
        Process a *MAR Archive* file for a given **Project** after it has been uploaded using
        `POST /api/v0/upload` (step 1).

        *MAR Archive* files are typically uploaded by the [Bort SDK](https://docs.memfault.com/docs/android/android-bort).
        This API can be used if you need to upload *MAR Archives* separately.

        Requires `Memfault-Project-Key` header authentication.

        ---

        #### Request Body

        | Field | Type | Description |
        |:------|:-----|:------------|
        | `file` | Object | **Required.** `{ "token": "<opaque token from Prepare Upload>" }` |

        ---

        #### Return Value

        Returns `202 - Accepted`. Processing is asynchronous.
      operationId: CommitMARFile
      parameters:
        - name: Memfault-Project-Key
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
      servers:
        - url: https://files.memfault.com
      requestBody:
        description: ""
        content:
          application/json:
            schema:
              type: object
            example:
              file:
                token: eyJ...
        required: true
      responses:
        "202":
          description: Accepted
          headers: {}
      deprecated: false
  /api/v0/upload/custom-data-recording:
    post:
      tags:
        - Upload
      summary: Commit Custom Data Recording
      description: |-
        Process a [Custom Data Recording (CDR)](https://mflt.io/custom-data-recordings) for a given
        **Project** after it has been uploaded using `POST /api/v0/upload` (step 1).

        Requires `Memfault-Project-Key` header authentication.

        NOTE: Duration field is in seconds (s).

        ---

        #### Request Body

        | Field | Type | Description |
        |:------|:-----|:------------|
        | `file` | Object | **Required.** `{ "token": "<opaque token from Prepare Upload>" }` |
        | `duration` | Number | Duration of the recording in seconds. |

        ---

        #### Return Value

        Returns `202 - Accepted`. Processing is asynchronous.
      operationId: CommitCustomDataRecording
      parameters:
        - name: Memfault-Project-Key
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
      servers:
        - url: https://files.memfault.com
      requestBody:
        description: ""
        content:
          application/json:
            schema:
              type: object
            example:
              file:
                token: eyJ...
              duration: 60
        required: true
      responses:
        "202":
          description: Accepted
          headers: {}
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/symbols:
    post:
      tags:
        - Artifacts
      summary: Upload Symbol File
      description: |-
        Process a **Symbol File** for a given **Project** after it has been uploaded using
        `POST /api/v0/upload` or `POST /api/v0/organizations/{org}/projects/{proj}/upload` (step 1).

        ---

        #### Request Body

        ```json
        {
          "file": { "token": "<opaque token from Prepare Upload>" }
        }
        ```

        ---

        #### Return Value

        Returns `202 - Accepted`. Processing is asynchronous.
      operationId: UploadSymbolFile
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      servers:
        - url: https://files.memfault.com
      requestBody:
        description: ""
        content:
          application/json:
            schema:
              type: object
            example:
              file:
                token: eyJ...
        required: true
      responses:
        "202":
          description: Accepted
          headers: {}
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/symbols-by-gnu-build-id/{gnu_build_id}:
    get:
      tags:
        - Artifacts
      summary: Get Symbol File by GNU Build ID
      description: |-
        Download a previously uploaded ELF **Symbol File** given its GNU Build ID from `files.memfault.com`.

        TIP: By using the HTTP `HEAD` method instead of `GET`, you can check for the existence of a
        symbol file without actually downloading it.

        ---

        #### Return Value

        Returns the ELF symbol file binary on success, or `404 Not Found` if no match.
      operationId: GetSymbolFileByGNUBuildID
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: gnu_build_id
          in: path
          description: GNU Build ID (hex string)
          required: true
          style: simple
          explode: false
          schema:
            type: string
      servers:
        - url: https://files.memfault.com
      responses:
        "200":
          description: ELF symbol file
          headers: {}
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/symbols-by-qcomm-adk-build-id/{subsystem_id}/{processor_id}/{build_id_number}:
    get:
      tags:
        - Artifacts
      summary: Get Symbol File by Qualcomm ADK Build ID
      description: |-
        Download a previously uploaded ELF **Symbol File** given its Qualcomm ADK Build ID Number from `files.memfault.com`.

        **Subsystem IDs:**

        | ID | Subsystem |
        |:---|:----------|
        | 0  | Curator   |
        | 1  | Host      |
        | 2  | Bluetooth |
        | 3  | Audio     |
        | 4  | Apps      |

        TIP: By using the HTTP `HEAD` method instead of `GET`, you can check for the existence of a
        symbol file without actually downloading it.

        ---

        #### Return Value

        Returns the ELF symbol file binary on success, or `404 Not Found` if no match.
      operationId: GetSymbolFileByQcommBuildID
      parameters:
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: subsystem_id
          in: path
          description: Qualcomm subsystem ID (0=Curator, 1=Host, 2=Bluetooth, 3=Audio, 4=Apps)
          required: true
          style: simple
          explode: false
          schema:
            type: integer
        - name: processor_id
          in: path
          description: Qualcomm processor ID
          required: true
          style: simple
          explode: false
          schema:
            type: integer
        - name: build_id_number
          in: path
          description: Qualcomm ADK Build ID Number
          required: true
          style: simple
          explode: false
          schema:
            type: integer
      servers:
        - url: https://files.memfault.com
      responses:
        "200":
          description: ELF symbol file
          headers: {}
      deprecated: false
  /api/v0/organizations/{organization_slug}/projects/{project_slug}/release-artifacts:
    post:
      tags:
        - Releases
      summary: Upload Release Artifact
      description: |-
        Process a **Release Artifact** for a given **Project** after it has been uploaded using
        `POST /api/v0/upload` or `POST /api/v0/organizations/{org}/projects/{proj}/upload` (step 1).

        A Release is created automatically based on the passed metadata.

        ---

        #### Request Body

        ```json
        {
          "file": { "token": "<opaque token from Prepare Upload>" },
          "software_version": {
            "version": "1.0.0",
            "software_type": "main-firmware",
            "revision": "g31cffde2b3"
          },
          "must_pass_through": false,
          "hardware_version": "hwrev1",
          "notes": "Fixed a bug in the WiFi driver"
        }
        ```

        ---

        #### Return Value

        Returns `202 - Accepted`. Processing is asynchronous.
      operationId: UploadReleaseArtifact
      parameters:
        - name: Content-Type
          in: header
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
            example: application/json
        - name: organization_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: project_slug
          in: path
          description: ""
          required: true
          style: simple
          explode: false
          schema:
            type: string
      servers:
        - url: https://files.memfault.com
      requestBody:
        description: ""
        content:
          application/json:
            schema:
              type: object
            example:
              file:
                token: eyJ...
              software_version:
                version: 1.0.0
                software_type: main-firmware
                revision: g31cffde2b3
              must_pass_through: false
              hardware_version: hwrev1
              notes: Fixed a bug in the WiFi driver
        required: true
      responses:
        "202":
          description: Accepted
          headers: {}
      deprecated: false
components:
  schemas:
    Me:
      title: Me
      required:
        - created_date
        - email
        - id
        - name
        - organizations
        - updated_date
      type: object
      properties:
        created_date:
          type: string
        email:
          type: string
        id:
          type: integer
          format: int32
        name:
          type: string
        organizations:
          type: array
          items:
            $ref: "#/components/schemas/Organization"
          description: ""
        updated_date:
          type: string
      example:
        created_date: "2019-05-22T04:33:21.472212+00:00"
        email: john@memfault.com
        id: 1
        name: John
        organizations:
          - id: 1
            name: Acme, Inc.
            slug: acme-inc
        updated_date: "2019-05-22T04:33:21.483559+00:00"
    Organization:
      title: Organization
      required:
        - id
        - name
        - slug
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type: string
        slug:
          type: string
      example:
        id: 1
        name: Acme, Inc.
        slug: acme-inc
    GenerateUserAPIKey:
      title: GenerateUserAPIKey
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data"
      example:
        data:
          api_key: dbdd9aa9f9e148b5bc1a1cc828bb1d95
    Data:
      title: Data
      required:
        - api_key
      type: object
      properties:
        api_key:
          type: string
      example:
        api_key: dbdd9aa9f9e148b5bc1a1cc828bb1d95
    GetUserAPIKey:
      title: GetUserAPIKey
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data"
      example:
        data:
          api_key: dbdd9aa9f9e148b5bc1a1cc828bb1d95
    CreateAProject:
      title: CreateAProject
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data2"
      example:
        data:
          api_key: b8e7e2c93e944440b4245e78c9b3e082
          count_devices: 0
          created_date: "2019-05-21T21:08:54.32353+00:00"
          id: 13
          name: Smart Sink
          os: FreeRTOS
          platform: nRF52
          slug: smart-sink
          updated_date: "2019-05-21T21:08:54.396858+00:00"
    Data2:
      title: Data2
      required:
        - api_key
        - count_devices
        - created_date
        - id
        - name
        - os
        - platform
        - slug
        - updated_date
      type: object
      properties:
        api_key:
          type: string
        count_devices:
          type: integer
          format: int32
        created_date:
          type: string
        id:
          type: integer
          format: int32
        name:
          type: string
        os:
          type: string
        platform:
          type: string
        slug:
          type: string
        updated_date:
          type: string
      example:
        api_key: b8e7e2c93e944440b4245e78c9b3e082
        count_devices: 0
        created_date: "2019-05-21T21:08:54.32353+00:00"
        id: 13
        name: Smart Sink
        os: FreeRTOS
        platform: nRF52
        slug: smart-sink
        updated_date: "2019-05-21T21:08:54.396858+00:00"
    ListProjects:
      title: ListProjects
      required:
        - data
        - paging
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/Data2"
          description: ""
        paging:
          $ref: "#/components/schemas/Paging"
      example:
        data:
          - api_key: b8e7e2c93e944440b4245e78c9b3e082
            count_devices: 0
            created_date: "2019-05-21T21:08:54.32353+00:00"
            id: 13
            name: Smart Sink
            os: FreeRTOS
            platform: nRF52
            slug: smart-sink
            updated_date: "2019-05-21T21:08:54.396858+00:00"
        paging:
          item_count: 1
          page: 1
          page_count: 1
          per_page: 100
          total_count: 1
    Paging:
      title: Paging
      required:
        - item_count
        - page
        - page_count
        - per_page
        - total_count
      type: object
      properties:
        item_count:
          type: integer
          format: int32
        page:
          type: integer
          format: int32
        page_count:
          type: integer
          format: int32
        per_page:
          type: integer
          format: int32
        total_count:
          type: integer
          format: int32
      example:
        item_count: 1
        page: 1
        page_count: 1
        per_page: 100
        total_count: 1
    RetrieveProject:
      title: RetrieveProject
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data2"
      example:
        data:
          api_key: b8e7e2c93e944440b4245e78c9b3e082
          count_devices: 0
          created_date: "2019-05-21T21:08:54.32353+00:00"
          id: 13
          name: Smart Sink
          os: FreeRTOS
          platform: nRF52
          slug: smart-sink
          updated_date: "2019-05-21T21:08:54.396858+00:00"
    UpdateProject:
      title: UpdateProject
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data2"
      example:
        data:
          api_key: b8e7e2c93e944440b4245e78c9b3e082
          count_devices: 0
          created_date: "2019-05-21T21:08:54.32353+00:00"
          id: 13
          name: Smart Sink
          os: FreeRTOS-AWS
          platform: nRF52
          slug: smart-sink
          updated_date: "2019-05-21T21:09:41.48637+00:00"
    GetProjectClientKey:
      title: GetProjectClientKey
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data"
      example:
        data:
          api_key: b8e7e2c93e944440b4245e78c9b3e082
    RefreshProjectClientKey:
      title: RefreshProjectClientKey
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data"
      example:
        data:
          api_key: b13aa6db4cc54709957be890eb822221
    CreateARelease:
      title: CreateARelease
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data8"
      example:
        data:
          artifacts: []
          count_devices: 0
          created_date: "2019-05-21T21:15:08.593624+00:00"
          extra_info: null
          id: 113
          min_version: ""
          notes: ""
          revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
          updated_date: "2019-05-21T21:15:08.596886+00:00"
          version: 1.0.0
    Data8:
      title: Data8
      required:
        - artifacts
        - count_devices
        - created_date
        - id
        - min_version
        - notes
        - revision
        - updated_date
        - version
      type: object
      properties:
        artifacts:
          type: array
          items:
            type: string
          description: ""
        count_devices:
          type: integer
          format: int32
        created_date:
          type: string
        extra_info:
          type: string
          nullable: true
        id:
          type: integer
          format: int32
        min_version:
          type: string
        notes:
          type: string
        revision:
          type: string
        updated_date:
          type: string
        version:
          type: string
      example:
        artifacts: []
        count_devices: 0
        created_date: "2019-05-21T21:15:08.593624+00:00"
        extra_info: null
        id: 113
        min_version: ""
        notes: ""
        revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
        updated_date: "2019-05-21T21:15:08.596886+00:00"
        version: 1.0.0
    ListReleases:
      title: ListReleases
      required:
        - data
        - paging
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/Data8"
          description: ""
        paging:
          $ref: "#/components/schemas/Paging"
      example:
        data:
          - artifacts: []
            count_devices: 0
            created_date: "2019-05-21T21:15:08.593624+00:00"
            extra_info: null
            id: 113
            min_version: ""
            notes: ""
            revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
            updated_date: "2019-05-21T21:15:08.596886+00:00"
            version: 1.0.0
        paging:
          item_count: 1
          page: 1
          page_count: 1
          per_page: 100
          total_count: 1
    RetrieveaRelease:
      title: RetrieveaRelease
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data8"
      example:
        data:
          artifacts: []
          count_devices: 0
          created_date: "2019-05-21T21:15:08.593624+00:00"
          extra_info: null
          id: 113
          min_version: ""
          notes: ""
          revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
          updated_date: "2019-05-21T21:15:08.596886+00:00"
          version: 1.0.0
    UpdateaRelease:
      title: UpdateaRelease
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data8"
      example:
        data:
          artifacts: []
          count_devices: 0
          created_date: "2019-05-21T21:26:55.207463+00:00"
          extra_info: null
          id: 7
          min_version: ""
          notes: ""
          revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
          updated_date: "2019-05-21T21:26:55.209415+00:00"
          version: 1.0.0
    CreateACohort:
      title: CreateACohort
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data12"
      example:
        data:
          count_devices: 0
          created_date: "2019-05-21T21:55:34.349088+00:00"
          id: 7
          last_deployment: null
          name: Internal Channel
          slug: internal
          updated_date: "2019-05-21T21:55:34.349106+00:00"
    Data12:
      title: Data12
      required:
        - count_devices
        - created_date
        - id
        - name
        - slug
        - updated_date
      type: object
      properties:
        count_devices:
          type: integer
          format: int32
        created_date:
          type: string
        id:
          type: integer
          format: int32
        last_deployment:
          type: string
          nullable: true
        name:
          type: string
        slug:
          type: string
        updated_date:
          type: string
      example:
        count_devices: 0
        created_date: "2019-05-21T21:55:34.349088+00:00"
        id: 7
        last_deployment: null
        name: Internal Channel
        slug: internal
        updated_date: "2019-05-21T21:55:34.349106+00:00"
    ListCohorts:
      title: ListCohorts
      required:
        - data
        - paging
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/Data12"
          description: ""
        paging:
          $ref: "#/components/schemas/Paging"
      example:
        data:
          - count_devices: 0
            created_date: "2019-05-21T21:26:48.477897+00:00"
            id: 5
            last_deployment: null
            name: default
            slug: default
            updated_date: "2019-05-21T21:26:48.477903+00:00"
          - count_devices: 0
            created_date: "2019-05-21T21:55:34.349088+00:00"
            id: 7
            last_deployment: null
            name: Internal Channel
            slug: internal
            updated_date: "2019-05-21T21:55:34.349106+00:00"
        paging:
          item_count: 2
          page: 1
          page_count: 1
          per_page: 100
          total_count: 2
    RetrieveaCohort:
      title: RetrieveaCohort
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data12"
      example:
        data:
          count_devices: 0
          created_date: "2019-05-21T21:55:34.349088+00:00"
          id: 7
          last_deployment: null
          name: Internal Channel
          slug: internal
          updated_date: "2019-05-21T21:55:34.349106+00:00"
    UpdateaCohort:
      title: UpdateaCohort
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data12"
      example:
        data:
          count_devices: 0
          created_date: "2019-05-21T21:55:34.349088+00:00"
          id: 7
          last_deployment: null
          name: Internal Group
          slug: internal
          updated_date: "2019-05-21T22:03:48.302371+00:00"
    ListDevicesinaCohort:
      title: ListDevicesinaCohort
      required:
        - data
        - paging
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/Data16"
          description: ""
        paging:
          $ref: "#/components/schemas/Paging"
      example:
        data:
          - cohort:
              count_devices: 1
              id: 7
              name: Internal Group
              slug: internal
            created_date: "2019-05-21T22:08:17.289061+00:00"
            device_serial: ABCD1234
            hardware_version: evt
            id: 35
            last_seen: null
            last_seen_release: null
            latest_install: null
            latest_trace: null
            owner_ref: user1234
            updated_date: "2019-05-21T22:11:55.900182+00:00"
        paging:
          item_count: 1
          page: 1
          page_count: 1
          per_page: 100
          total_count: 1
    Data16:
      title: Data16
      required:
        - cohort
        - created_date
        - device_serial
        - hardware_version
        - id
        - owner_ref
        - updated_date
      type: object
      properties:
        cohort:
          $ref: "#/components/schemas/Cohort"
        created_date:
          type: string
        device_serial:
          type: string
        hardware_version:
          type: string
        id:
          type: integer
          format: int32
        last_seen:
          type: string
          nullable: true
        last_seen_release:
          type: string
          nullable: true
        latest_install:
          type: string
          nullable: true
        latest_trace:
          type: string
          nullable: true
        owner_ref:
          type: string
        updated_date:
          type: string
      example:
        cohort:
          count_devices: 1
          id: 7
          name: Internal Group
          slug: internal
        created_date: "2019-05-21T22:08:17.289061+00:00"
        device_serial: ABCD1234
        hardware_version: evt
        id: 35
        last_seen: null
        last_seen_release: null
        latest_install: null
        latest_trace: null
        owner_ref: user1234
        updated_date: "2019-05-21T22:11:55.900182+00:00"
    Cohort:
      title: Cohort
      required:
        - count_devices
        - id
        - name
        - slug
      type: object
      properties:
        count_devices:
          type: integer
          format: int32
        id:
          type: integer
          format: int32
        name:
          type: string
        slug:
          type: string
      example:
        count_devices: 1
        id: 7
        name: Internal Group
        slug: internal
    CreateADeployment:
      title: CreateADeployment
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data17"
      example:
        data:
          cohort:
            count_devices: 1
            id: 7
            name: Internal Group
            slug: internal
          created_date: "2019-05-21T22:49:23.851977+00:00"
          deployed_date: "2019-05-21T22:49:23.851977+00:00"
          deployer:
            email: tyler@memfault.com
            id: 1
            name: John
          extra_info: null
          id: 9
          release:
            id: 8
            revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
            version: 1.0.0
          rollout_percent: 0
          status: done
          type: normal
          updated_date: "2019-05-21T22:49:23.851983+00:00"
    Data17:
      title: Data17
      required:
        - cohort
        - created_date
        - deployed_date
        - deployer
        - id
        - release
        - rollout_percent
        - status
        - type
        - updated_date
      type: object
      properties:
        cohort:
          $ref: "#/components/schemas/Cohort"
        created_date:
          type: string
        deployed_date:
          type: string
        deployer:
          $ref: "#/components/schemas/Deployer"
        extra_info:
          type: string
          nullable: true
        id:
          type: integer
          format: int32
        release:
          $ref: "#/components/schemas/Release"
        rollout_percent:
          type: integer
          format: int32
        status:
          type: string
        type:
          type: string
        updated_date:
          type: string
      example:
        cohort:
          count_devices: 1
          id: 7
          name: Internal Group
          slug: internal
        created_date: "2019-05-21T22:49:23.851977+00:00"
        deployed_date: "2019-05-21T22:49:23.851977+00:00"
        deployer:
          email: tyler@memfault.com
          id: 1
          name: John
        extra_info: null
        id: 9
        release:
          id: 8
          revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
          version: 1.0.0
        rollout_percent: 0
        status: done
        type: normal
        updated_date: "2019-05-21T22:49:23.851983+00:00"
    Deployer:
      title: Deployer
      required:
        - email
        - id
        - name
      type: object
      properties:
        email:
          type: string
        id:
          type: integer
          format: int32
        name:
          type: string
      example:
        email: tyler@memfault.com
        id: 1
        name: John
    Release:
      title: Release
      required:
        - id
        - revision
        - version
      type: object
      properties:
        id:
          type: integer
          format: int32
        revision:
          type: string
        version:
          type: string
      example:
        id: 8
        revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
        version: 1.0.0
    ListDeployments:
      title: ListDeployments
      required:
        - data
        - paging
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/Data17"
          description: ""
        paging:
          $ref: "#/components/schemas/Paging"
      example:
        data:
          - cohort:
              count_devices: 1
              id: 7
              name: Internal Group
              slug: internal
            created_date: "2019-05-21T22:49:23.851977+00:00"
            deployed_date: "2019-05-21T22:49:23.851977+00:00"
            deployer:
              email: tyler@memfault.com
              id: 1
              name: John
            extra_info: null
            id: 9
            release:
              id: 8
              revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
              version: 1.0.0
            rollout_percent: 0
            status: done
            type: normal
            updated_date: "2019-05-21T22:49:23.851983+00:00"
        paging:
          item_count: 1
          page: 1
          page_count: 1
          per_page: 100
          total_count: 1
    RetrieveaDeployment:
      title: RetrieveaDeployment
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data17"
      example:
        data:
          cohort:
            count_devices: 1
            id: 7
            name: Internal Group
            slug: internal
          created_date: "2019-05-21T22:49:23.851977+00:00"
          deployed_date: "2019-05-21T22:49:23.851977+00:00"
          deployer:
            email: tyler@memfault.com
            id: 1
            name: John
          extra_info: null
          id: 9
          release:
            id: 8
            revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
            version: 1.0.0
          rollout_percent: 0
          status: done
          type: normal
          updated_date: "2019-05-21T22:49:23.851983+00:00"
    UpdateaDeployment:
      title: UpdateaDeployment
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data20"
      example:
        data:
          cohort:
            count_devices: 1
            id: 7
            name: Internal Group
            slug: internal
          created_date: "2019-05-21T22:49:23.851977+00:00"
          deployed_date: "2019-05-21T22:49:23.851977+00:00"
          deployer:
            email: tyler@memfault.com
            id: 1
            name: John
          extra_info:
            ci: jenkins
          id: 9
          release:
            id: 8
            revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
            version: 1.0.0
          rollout_percent: 0
          status: done
          type: normal
          updated_date: "2019-05-21T22:50:57.591108+00:00"
    Data20:
      title: Data20
      required:
        - cohort
        - created_date
        - deployed_date
        - deployer
        - extra_info
        - id
        - release
        - rollout_percent
        - status
        - type
        - updated_date
      type: object
      properties:
        cohort:
          $ref: "#/components/schemas/Cohort"
        created_date:
          type: string
        deployed_date:
          type: string
        deployer:
          $ref: "#/components/schemas/Deployer"
        extra_info:
          $ref: "#/components/schemas/ExtraInfo"
        id:
          type: integer
          format: int32
        release:
          $ref: "#/components/schemas/Release"
        rollout_percent:
          type: integer
          format: int32
        status:
          type: string
        type:
          type: string
        updated_date:
          type: string
      example:
        cohort:
          count_devices: 1
          id: 7
          name: Internal Group
          slug: internal
        created_date: "2019-05-21T22:49:23.851977+00:00"
        deployed_date: "2019-05-21T22:49:23.851977+00:00"
        deployer:
          email: tyler@memfault.com
          id: 1
          name: John
        extra_info:
          ci: jenkins
        id: 9
        release:
          id: 8
          revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
          version: 1.0.0
        rollout_percent: 0
        status: done
        type: normal
        updated_date: "2019-05-21T22:50:57.591108+00:00"
    ExtraInfo:
      title: ExtraInfo
      required:
        - ci
      type: object
      properties:
        ci:
          type: string
      example:
        ci: jenkins
    CreateSingleDevice:
      title: CreateSingleDevice
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data16"
      example:
        data:
          cohort:
            count_devices: 1
            id: 7
            name: Internal Group
            slug: internal
          created_date: "2019-05-21T22:08:17.289061+00:00"
          device_serial: ABCD1234
          hardware_version: evt
          id: 35
          last_seen: null
          last_seen_release: null
          latest_install: null
          latest_trace: null
          owner_ref: ""
          updated_date: "2019-05-21T22:08:17.296289+00:00"
    ListDevices:
      title: ListDevices
      required:
        - data
        - paging
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/Data16"
          description: ""
        paging:
          $ref: "#/components/schemas/Paging"
      example:
        data:
          - cohort:
              count_devices: 1
              id: 7
              name: Internal Group
              slug: internal
            created_date: "2019-05-21T22:08:17.289061+00:00"
            device_serial: ABCD1234
            hardware_version: evt
            id: 35
            last_seen: null
            last_seen_release: null
            latest_install: null
            latest_trace: null
            owner_ref: ""
            updated_date: "2019-05-21T22:08:17.296289+00:00"
        paging:
          item_count: 1
          page: 1
          page_count: 1
          per_page: 100
          total_count: 1
    RetrieveaDevice:
      title: RetrieveaDevice
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data16"
      example:
        data:
          cohort:
            count_devices: 1
            id: 7
            name: Internal Group
            slug: internal
          created_date: "2019-05-21T22:08:17.289061+00:00"
          device_serial: ABCD1234
          hardware_version: evt
          id: 35
          last_seen: null
          last_seen_release: null
          latest_install: null
          latest_trace: null
          owner_ref: user1234
          updated_date: "2019-05-21T22:11:55.900182+00:00"
    UpdateaDevice:
      title: UpdateaDevice
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data16"
      example:
        data:
          cohort:
            count_devices: 1
            id: 7
            name: Internal Group
            slug: internal
          created_date: "2019-05-21T22:08:17.289061+00:00"
          device_serial: ABCD1234
          hardware_version: evt
          id: 35
          last_seen: null
          last_seen_release: null
          latest_install: null
          latest_trace: null
          owner_ref: user1234
          updated_date: "2019-05-21T22:11:55.900182+00:00"
    UploadEvents-InvalidSchema:
      title: UploadEvents-InvalidSchema
      required:
        - error
      type: object
      properties:
        error:
          $ref: "#/components/schemas/Error"
      example:
        error:
          code: 1000
          http_code: 400
          message:
            "0":
              event_info:
                metrics:
                  uptime_s:
                    value:
                      - Not a valid integer.
          type: InvalidUsageError
    Error:
      title: Error
      required:
        - code
        - http_code
        - message
        - type
      type: object
      properties:
        code:
          type: integer
          format: int32
        http_code:
          type: integer
          format: int32
        message:
          type: object
          additionalProperties:
            $ref: "#/components/schemas/generatedObject"
        type:
          type: string
      example:
        code: 1000
        http_code: 400
        message:
          "0":
            event_info:
              metrics:
                uptime_s:
                  value:
                    - Not a valid integer.
        type: InvalidUsageError
    generatedObject:
      title: generatedObject
      required:
        - event_info
      type: object
      properties:
        event_info:
          $ref: "#/components/schemas/EventInfo"
      example:
        event_info:
          metrics:
            uptime_s:
              value:
                - Not a valid integer.
    EventInfo:
      title: EventInfo
      required:
        - metrics
      type: object
      properties:
        metrics:
          $ref: "#/components/schemas/Metrics"
      example:
        metrics:
          uptime_s:
            value:
              - Not a valid integer.
    Metrics:
      title: Metrics
      required:
        - uptime_s
      type: object
      properties:
        uptime_s:
          $ref: "#/components/schemas/UptimeS"
      example:
        uptime_s:
          value:
            - Not a valid integer.
    UptimeS:
      title: UptimeS
      required:
        - value
      type: object
      properties:
        value:
          type: array
          items:
            type: string
          description: ""
      example:
        value:
          - Not a valid integer.
    ListEvents:
      title: ListEvents
      required:
        - data
        - paging
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/Data25"
          description: ""
        paging:
          $ref: "#/components/schemas/Paging"
      example:
        data:
          - captured_date: "2019-05-21T22:19:57.782341+00:00"
            created_date: "2019-05-21T22:19:57.782328+00:00"
            device:
              device_serial: ABCD1234
              hardware_version: evt
              id: 35
            event_info:
              lr: 226574
              pc: 226689
              reason: 32769
              sp: 6712
            id: 3869
            received_date: "2019-05-21T22:19:57.782338+00:00"
            release:
              id: 8
              revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
              version: 1.0.0
            type: trace
            user_info: null
        paging:
          item_count: 1
          page: 1
          page_count: 1
          per_page: 100
          total_count: 1
    Data25:
      title: Data25
      required:
        - captured_date
        - created_date
        - device
        - event_info
        - id
        - received_date
        - release
        - type
      type: object
      properties:
        captured_date:
          type: string
        created_date:
          type: string
        device:
          $ref: "#/components/schemas/Device"
        event_info:
          $ref: "#/components/schemas/EventInfo1"
        id:
          type: integer
          format: int32
        received_date:
          type: string
        release:
          $ref: "#/components/schemas/Release"
        type:
          type: string
        user_info:
          type: string
          nullable: true
      example:
        captured_date: "2019-05-21T22:19:57.782341+00:00"
        created_date: "2019-05-21T22:19:57.782328+00:00"
        device:
          device_serial: ABCD1234
          hardware_version: evt
          id: 35
        event_info:
          lr: 226574
          pc: 226689
          reason: 32769
          sp: 6712
        id: 3869
        received_date: "2019-05-21T22:19:57.782338+00:00"
        release:
          id: 8
          revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
          version: 1.0.0
        type: trace
        user_info: null
    Device:
      title: Device
      required:
        - device_serial
        - hardware_version
        - id
      type: object
      properties:
        device_serial:
          type: string
        hardware_version:
          type: string
        id:
          type: integer
          format: int32
      example:
        device_serial: ABCD1234
        hardware_version: evt
        id: 35
    EventInfo1:
      title: EventInfo1
      required:
        - lr
        - pc
        - reason
        - sp
      type: object
      properties:
        lr:
          type: integer
          format: int32
        pc:
          type: integer
          format: int32
        reason:
          type: integer
          format: int32
        sp:
          type: integer
          format: int32
      example:
        lr: 226574
        pc: 226689
        reason: 32769
        sp: 6712
    RetrieveanEvent:
      title: RetrieveanEvent
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data25"
      example:
        data:
          captured_date: "2019-05-21T22:19:57.782341+00:00"
          created_date: "2019-05-21T22:19:57.782328+00:00"
          device:
            device_serial: ABCD1234
            hardware_version: evt
            id: 35
          event_info:
            lr: 226574
            pc: 226689
            reason: 32769
            sp: 6712
          id: 3869
          received_date: "2019-05-21T22:19:57.782338+00:00"
          release:
            id: 8
            revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
            version: 1.0.0
          type: trace
          user_info: null
    ListIssues:
      title: ListIssues
      required:
        - data
        - paging
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/Data27"
          description: ""
        paging:
          $ref: "#/components/schemas/Paging"
      example:
        data:
          - counts:
              - 10
              - 11
              - 15
              - 10
              - 10
              - 11
              - 12
              - 6
              - 5
              - 15
              - 11
              - 10
              - 13
              - 12
              - 15
              - 5
              - 4
              - 10
              - 7
              - 5
              - 4
              - 11
              - 15
              - 14
            created_date: "2019-05-21T22:32:58.168618+00:00"
            device_count: 1
            distribution:
              hardware_version:
                - count: 13
                  version: qq_pvt
                - count: 9
                  version: xx_evt
              sw_version:
                - count: 13
                  version: "0.9"
                - count: 7
                  version: 1.0.0
                - count: 9
                  version: 1.0.1
            first_release:
              id: 8
              revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
              version: 1.0.0
            first_seen: "2019-05-21T22:32:57.801998+00:00"
            id: 11
            last_release:
              id: 8
              revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
              version: 1.0.0
            last_seen: "2019-05-21T22:32:57.801998+00:00"
            last_trace:
              captured_date: "2019-05-21T22:32:57.801998+00:00"
              context: ""
              created_date: "2019-05-21T22:32:57.801961+00:00"
              device:
                device_serial: ABCD1234
                hardware_version: evt
                id: 35
              entries:
                threads:
                  - crashed: false
                    current: true
                    registers: []
                    reporting: false
                    stacktrace:
                      - address: 226689
                        context: []
                        file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_ram_reboot_info_tracking.c
                        function: memfault_reboot_tracking_mark_crash
                        index: 0
                        lineno: 85
                      - address: 226574
                        context: []
                        file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_fault_handling.c
                        function: memfault_reboot_tracking_assert_handler
                        index: 1
                        lineno: 171
                    state: unknown
                    tid: 1
              id: 20
              message: ""
              reason: Assert
              received_date: "2019-05-21T22:32:57.801994+00:00"
              release:
                id: 8
                revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
                version: 1.0.0
              signature: 853ff579aabced352bc77dc85f481660545f78e2a27974e62a26b23b71ffe3a2
              source_type: event
              title: Assert at memfault_reboot_tracking_assert_handler
            message: ""
            resolution: null
            signature: 853ff579aabced352bc77dc85f481660545f78e2a27974e62a26b23b71ffe3a2
            status: open
            title: Assert at memfault_reboot_tracking_assert_handler
            trace_count: 1
            updated_date: "2019-05-21T22:32:58.168622+00:00"
        paging:
          item_count: 1
          page: 1
          page_count: 1
          per_page: 100
          total_count: 1
    Data27:
      title: Data27
      required:
        - counts
        - created_date
        - device_count
        - distribution
        - first_release
        - first_seen
        - id
        - last_release
        - last_seen
        - last_trace
        - message
        - signature
        - status
        - title
        - trace_count
        - updated_date
      type: object
      properties:
        counts:
          type: array
          items:
            type: integer
            format: int32
          description: ""
        created_date:
          type: string
        device_count:
          type: integer
          format: int32
        distribution:
          $ref: "#/components/schemas/Distribution"
        first_release:
          $ref: "#/components/schemas/FirstRelease"
        first_seen:
          type: string
        id:
          type: integer
          format: int32
        last_release:
          $ref: "#/components/schemas/LastRelease"
        last_seen:
          type: string
        last_trace:
          $ref: "#/components/schemas/LastTrace"
        message:
          type: string
        resolution:
          type: string
          nullable: true
        signature:
          type: string
        status:
          type: string
        title:
          type: string
        trace_count:
          type: integer
          format: int32
        updated_date:
          type: string
      example:
        counts:
          - 10
          - 11
          - 15
          - 10
          - 10
          - 11
          - 12
          - 6
          - 5
          - 15
          - 11
          - 10
          - 13
          - 12
          - 15
          - 5
          - 4
          - 10
          - 7
          - 5
          - 4
          - 11
          - 15
          - 14
        created_date: "2019-05-21T22:32:58.168618+00:00"
        device_count: 1
        distribution:
          hardware_version:
            - count: 13
              version: qq_pvt
            - count: 9
              version: xx_evt
          sw_version:
            - count: 13
              version: "0.9"
            - count: 7
              version: 1.0.0
            - count: 9
              version: 1.0.1
        first_release:
          id: 8
          revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
          version: 1.0.0
        first_seen: "2019-05-21T22:32:57.801998+00:00"
        id: 11
        last_release:
          id: 8
          revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
          version: 1.0.0
        last_seen: "2019-05-21T22:32:57.801998+00:00"
        last_trace:
          captured_date: "2019-05-21T22:32:57.801998+00:00"
          context: ""
          created_date: "2019-05-21T22:32:57.801961+00:00"
          device:
            device_serial: ABCD1234
            hardware_version: evt
            id: 35
          entries:
            threads:
              - crashed: false
                current: true
                registers: []
                reporting: false
                stacktrace:
                  - address: 226689
                    context: []
                    file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_ram_reboot_info_tracking.c
                    function: memfault_reboot_tracking_mark_crash
                    index: 0
                    lineno: 85
                  - address: 226574
                    context: []
                    file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_fault_handling.c
                    function: memfault_reboot_tracking_assert_handler
                    index: 1
                    lineno: 171
                state: unknown
                tid: 1
          id: 20
          message: ""
          reason: Assert
          received_date: "2019-05-21T22:32:57.801994+00:00"
          release:
            id: 8
            revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
            version: 1.0.0
          signature: 853ff579aabced352bc77dc85f481660545f78e2a27974e62a26b23b71ffe3a2
          source_type: event
          title: Assert at memfault_reboot_tracking_assert_handler
        message: ""
        resolution: null
        signature: 853ff579aabced352bc77dc85f481660545f78e2a27974e62a26b23b71ffe3a2
        status: open
        title: Assert at memfault_reboot_tracking_assert_handler
        trace_count: 1
        updated_date: "2019-05-21T22:32:58.168622+00:00"
    Distribution:
      title: Distribution
      required:
        - hardware_version
        - sw_version
      type: object
      properties:
        hardware_version:
          type: array
          items:
            $ref: "#/components/schemas/HardwareVersion"
          description: ""
        sw_version:
          type: array
          items:
            $ref: "#/components/schemas/SwVersion"
          description: ""
      example:
        hardware_version:
          - count: 13
            version: qq_pvt
          - count: 9
            version: xx_evt
        sw_version:
          - count: 13
            version: "0.9"
          - count: 7
            version: 1.0.0
          - count: 9
            version: 1.0.1
    HardwareVersion:
      title: HardwareVersion
      required:
        - count
        - version
      type: object
      properties:
        count:
          type: integer
          format: int32
        version:
          type: string
      example:
        count: 13
        version: qq_pvt
    SwVersion:
      title: SwVersion
      required:
        - count
        - version
      type: object
      properties:
        count:
          type: integer
          format: int32
        version:
          type: string
      example:
        count: 13
        version: "0.9"
    FirstRelease:
      title: FirstRelease
      required:
        - id
        - revision
        - version
      type: object
      properties:
        id:
          type: integer
          format: int32
        revision:
          type: string
        version:
          type: string
      example:
        id: 8
        revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
        version: 1.0.0
    LastRelease:
      title: LastRelease
      required:
        - id
        - revision
        - version
      type: object
      properties:
        id:
          type: integer
          format: int32
        revision:
          type: string
        version:
          type: string
      example:
        id: 8
        revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
        version: 1.0.0
    LastTrace:
      title: LastTrace
      required:
        - captured_date
        - context
        - created_date
        - device
        - entries
        - id
        - message
        - reason
        - received_date
        - release
        - signature
        - source_type
        - title
      type: object
      properties:
        captured_date:
          type: string
        context:
          type: string
        created_date:
          type: string
        device:
          $ref: "#/components/schemas/Device"
        entries:
          $ref: "#/components/schemas/Entries"
        id:
          type: integer
          format: int32
        message:
          type: string
        reason:
          type: string
        received_date:
          type: string
        release:
          $ref: "#/components/schemas/Release"
        signature:
          type: string
        source_type:
          type: string
        title:
          type: string
      example:
        captured_date: "2019-05-21T22:32:57.801998+00:00"
        context: ""
        created_date: "2019-05-21T22:32:57.801961+00:00"
        device:
          device_serial: ABCD1234
          hardware_version: evt
          id: 35
        entries:
          threads:
            - crashed: false
              current: true
              registers: []
              reporting: false
              stacktrace:
                - address: 226689
                  context: []
                  file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_ram_reboot_info_tracking.c
                  function: memfault_reboot_tracking_mark_crash
                  index: 0
                  lineno: 85
                - address: 226574
                  context: []
                  file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_fault_handling.c
                  function: memfault_reboot_tracking_assert_handler
                  index: 1
                  lineno: 171
              state: unknown
              tid: 1
        id: 20
        message: ""
        reason: Assert
        received_date: "2019-05-21T22:32:57.801994+00:00"
        release:
          id: 8
          revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
          version: 1.0.0
        signature: 853ff579aabced352bc77dc85f481660545f78e2a27974e62a26b23b71ffe3a2
        source_type: event
        title: Assert at memfault_reboot_tracking_assert_handler
    Entries:
      title: Entries
      required:
        - threads
      type: object
      properties:
        threads:
          type: array
          items:
            $ref: "#/components/schemas/Thread"
          description: ""
      example:
        threads:
          - crashed: false
            current: true
            registers: []
            reporting: false
            stacktrace:
              - address: 226689
                context: []
                file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_ram_reboot_info_tracking.c
                function: memfault_reboot_tracking_mark_crash
                index: 0
                lineno: 85
              - address: 226574
                context: []
                file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_fault_handling.c
                function: memfault_reboot_tracking_assert_handler
                index: 1
                lineno: 171
            state: unknown
            tid: 1
    Thread:
      title: Thread
      required:
        - crashed
        - current
        - registers
        - reporting
        - stacktrace
        - state
        - tid
      type: object
      properties:
        crashed:
          type: boolean
        current:
          type: boolean
        registers:
          type: array
          items:
            type: string
          description: ""
        reporting:
          type: boolean
        stacktrace:
          type: array
          items:
            $ref: "#/components/schemas/Stacktrace"
          description: ""
        state:
          type: string
        tid:
          type: integer
          format: int32
      example:
        crashed: false
        current: true
        registers: []
        reporting: false
        stacktrace:
          - address: 226689
            context: []
            file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_ram_reboot_info_tracking.c
            function: memfault_reboot_tracking_mark_crash
            index: 0
            lineno: 85
          - address: 226574
            context: []
            file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_fault_handling.c
            function: memfault_reboot_tracking_assert_handler
            index: 1
            lineno: 171
        state: unknown
        tid: 1
    Stacktrace:
      title: Stacktrace
      required:
        - address
        - context
        - file
        - function
        - index
        - lineno
      type: object
      properties:
        address:
          type: integer
          format: int32
        context:
          type: array
          items:
            type: string
          description: ""
        file:
          type: string
        function:
          type: string
        index:
          type: integer
          format: int32
        lineno:
          type: integer
          format: int32
      example:
        address: 226689
        context: []
        file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_ram_reboot_info_tracking.c
        function: memfault_reboot_tracking_mark_crash
        index: 0
        lineno: 85
    RetrieveanIssue:
      title: RetrieveanIssue
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data27"
      example:
        data:
          counts:
            - 10
            - 11
            - 15
            - 10
            - 10
            - 11
            - 12
            - 6
            - 5
            - 15
            - 11
            - 10
            - 13
            - 12
            - 15
            - 5
            - 4
            - 10
            - 7
            - 5
            - 4
            - 11
            - 15
            - 14
          created_date: "2019-05-21T22:32:58.168618+00:00"
          device_count: 1
          distribution:
            hardware_version:
              - count: 13
                version: qq_pvt
              - count: 9
                version: xx_evt
            sw_version:
              - count: 13
                version: "0.9"
              - count: 7
                version: 1.0.0
              - count: 9
                version: 1.0.1
          first_release:
            id: 8
            revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
            version: 1.0.0
          first_seen: "2019-05-21T22:32:57.801998+00:00"
          id: 11
          last_release:
            id: 8
            revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
            version: 1.0.0
          last_seen: "2019-05-21T22:32:57.801998+00:00"
          last_trace:
            captured_date: "2019-05-21T22:32:57.801998+00:00"
            context: ""
            created_date: "2019-05-21T22:32:57.801961+00:00"
            device:
              device_serial: ABCD1234
              hardware_version: evt
              id: 35
            entries:
              threads:
                - crashed: false
                  current: true
                  registers: []
                  reporting: false
                  stacktrace:
                    - address: 226689
                      context: []
                      file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_ram_reboot_info_tracking.c
                      function: memfault_reboot_tracking_mark_crash
                      index: 0
                      lineno: 85
                    - address: 226574
                      context: []
                      file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_fault_handling.c
                      function: memfault_reboot_tracking_assert_handler
                      index: 1
                      lineno: 171
                  state: unknown
                  tid: 1
            id: 20
            message: ""
            reason: Assert
            received_date: "2019-05-21T22:32:57.801994+00:00"
            release:
              id: 8
              revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
              version: 1.0.0
            signature: 853ff579aabced352bc77dc85f481660545f78e2a27974e62a26b23b71ffe3a2
            source_type: event
            title: Assert at memfault_reboot_tracking_assert_handler
          message: ""
          resolution: null
          signature: 853ff579aabced352bc77dc85f481660545f78e2a27974e62a26b23b71ffe3a2
          status: open
          title: Assert at memfault_reboot_tracking_assert_handler
          trace_count: 1
          updated_date: "2019-05-21T22:32:58.168622+00:00"
    UpdateanIssueRequest:
      title: UpdateanIssueRequest
      required:
        - status
      type: object
      properties:
        status:
          type: string
      example:
        status: open
    UpdateanIssue:
      title: UpdateanIssue
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data29"
      example:
        data:
          counts:
            - 10
            - 11
            - 15
            - 10
            - 10
            - 11
            - 12
            - 6
            - 5
            - 15
            - 11
            - 10
            - 13
            - 12
            - 15
            - 5
            - 4
            - 10
            - 7
            - 5
            - 4
            - 11
            - 15
            - 14
          created_date: "2019-05-21T22:32:58.168618+00:00"
          device_count: 1
          distribution:
            hardware_version:
              - count: 13
                version: qq_pvt
              - count: 9
                version: xx_evt
            sw_version:
              - count: 13
                version: "0.9"
              - count: 7
                version: 1.0.0
              - count: 9
                version: 1.0.1
          first_release:
            id: 8
            revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
            version: 1.0.0
          first_seen: "2019-05-21T22:32:57.801998+00:00"
          id: 11
          last_release:
            id: 8
            revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
            version: 1.0.0
          last_seen: "2019-05-21T22:32:57.801998+00:00"
          last_trace:
            captured_date: "2019-05-21T22:32:57.801998+00:00"
            context: ""
            created_date: "2019-05-21T22:32:57.801961+00:00"
            device:
              device_serial: ABCD1234
              hardware_version: evt
              id: 35
            entries:
              threads:
                - crashed: false
                  current: true
                  registers: []
                  reporting: false
                  stacktrace:
                    - address: 226689
                      context: []
                      file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_ram_reboot_info_tracking.c
                      function: memfault_reboot_tracking_mark_crash
                      index: 0
                      lineno: 85
                    - address: 226574
                      context: []
                      file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_fault_handling.c
                      function: memfault_reboot_tracking_assert_handler
                      index: 1
                      lineno: 171
                  state: unknown
                  tid: 1
            id: 20
            message: ""
            reason: Assert
            received_date: "2019-05-21T22:32:57.801994+00:00"
            release:
              id: 8
              revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
              version: 1.0.0
            signature: 853ff579aabced352bc77dc85f481660545f78e2a27974e62a26b23b71ffe3a2
            source_type: event
            title: Assert at memfault_reboot_tracking_assert_handler
          message: ""
          resolution:
            actor:
              email: tyler@memfault.com
              id: 1
              name: John
            timestamp: "2019-05-21T22:44:36.438341+00:00"
          signature: 853ff579aabced352bc77dc85f481660545f78e2a27974e62a26b23b71ffe3a2
          status: resolved
          title: Assert at memfault_reboot_tracking_assert_handler
          trace_count: 1
          updated_date: "2019-05-21T22:44:36.439351+00:00"
    Data29:
      title: Data29
      required:
        - counts
        - created_date
        - device_count
        - distribution
        - first_release
        - first_seen
        - id
        - last_release
        - last_seen
        - last_trace
        - message
        - resolution
        - signature
        - status
        - title
        - trace_count
        - updated_date
      type: object
      properties:
        counts:
          type: array
          items:
            type: integer
            format: int32
          description: ""
        created_date:
          type: string
        device_count:
          type: integer
          format: int32
        distribution:
          $ref: "#/components/schemas/Distribution"
        first_release:
          $ref: "#/components/schemas/FirstRelease"
        first_seen:
          type: string
        id:
          type: integer
          format: int32
        last_release:
          $ref: "#/components/schemas/LastRelease"
        last_seen:
          type: string
        last_trace:
          $ref: "#/components/schemas/LastTrace"
        message:
          type: string
        resolution:
          $ref: "#/components/schemas/Resolution"
        signature:
          type: string
        status:
          type: string
        title:
          type: string
        trace_count:
          type: integer
          format: int32
        updated_date:
          type: string
      example:
        counts:
          - 10
          - 11
          - 15
          - 10
          - 10
          - 11
          - 12
          - 6
          - 5
          - 15
          - 11
          - 10
          - 13
          - 12
          - 15
          - 5
          - 4
          - 10
          - 7
          - 5
          - 4
          - 11
          - 15
          - 14
        created_date: "2019-05-21T22:32:58.168618+00:00"
        device_count: 1
        distribution:
          hardware_version:
            - count: 13
              version: qq_pvt
            - count: 9
              version: xx_evt
          sw_version:
            - count: 13
              version: "0.9"
            - count: 7
              version: 1.0.0
            - count: 9
              version: 1.0.1
        first_release:
          id: 8
          revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
          version: 1.0.0
        first_seen: "2019-05-21T22:32:57.801998+00:00"
        id: 11
        last_release:
          id: 8
          revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
          version: 1.0.0
        last_seen: "2019-05-21T22:32:57.801998+00:00"
        last_trace:
          captured_date: "2019-05-21T22:32:57.801998+00:00"
          context: ""
          created_date: "2019-05-21T22:32:57.801961+00:00"
          device:
            device_serial: ABCD1234
            hardware_version: evt
            id: 35
          entries:
            threads:
              - crashed: false
                current: true
                registers: []
                reporting: false
                stacktrace:
                  - address: 226689
                    context: []
                    file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_ram_reboot_info_tracking.c
                    function: memfault_reboot_tracking_mark_crash
                    index: 0
                    lineno: 85
                  - address: 226574
                    context: []
                    file: /Users/chrisc/dev/memfault/sdk/embedded/src/memfault_fault_handling.c
                    function: memfault_reboot_tracking_assert_handler
                    index: 1
                    lineno: 171
                state: unknown
                tid: 1
          id: 20
          message: ""
          reason: Assert
          received_date: "2019-05-21T22:32:57.801994+00:00"
          release:
            id: 8
            revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
            version: 1.0.0
          signature: 853ff579aabced352bc77dc85f481660545f78e2a27974e62a26b23b71ffe3a2
          source_type: event
          title: Assert at memfault_reboot_tracking_assert_handler
        message: ""
        resolution:
          actor:
            email: tyler@memfault.com
            id: 1
            name: John
          timestamp: "2019-05-21T22:44:36.438341+00:00"
        signature: 853ff579aabced352bc77dc85f481660545f78e2a27974e62a26b23b71ffe3a2
        status: resolved
        title: Assert at memfault_reboot_tracking_assert_handler
        trace_count: 1
        updated_date: "2019-05-21T22:44:36.439351+00:00"
    Resolution:
      title: Resolution
      required:
        - actor
        - timestamp
      type: object
      properties:
        actor:
          $ref: "#/components/schemas/Actor"
        timestamp:
          type: string
      example:
        actor:
          email: tyler@memfault.com
          id: 1
          name: John
        timestamp: "2019-05-21T22:44:36.438341+00:00"
    Actor:
      title: Actor
      required:
        - email
        - id
        - name
      type: object
      properties:
        email:
          type: string
        id:
          type: integer
          format: int32
        name:
          type: string
      example:
        email: tyler@memfault.com
        id: 1
        name: John
    ListInstalls:
      title: ListInstalls
      required:
        - data
        - paging
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/Data30"
          description: ""
        paging:
          $ref: "#/components/schemas/Paging"
      example:
        data:
          - began_at: "2019-05-21T22:19:57.762973+00:00"
            created_date: "2019-05-21T22:19:57.762973+00:00"
            device:
              device_serial: ABCD1234
              hardware_version: evt
              id: 35
            id: 53
            release:
              id: 8
              revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
              version: 1.0.0
            status: success
            transitioned_at: "2019-05-21T22:19:57.771497+00:00"
            updated_date: "2019-05-21T22:19:57.778679+00:00"
        paging:
          item_count: 1
          page: 1
          page_count: 1
          per_page: 100
          total_count: 1
    Data30:
      title: Data30
      required:
        - began_at
        - created_date
        - device
        - id
        - release
        - status
        - transitioned_at
        - updated_date
      type: object
      properties:
        began_at:
          type: string
        created_date:
          type: string
        device:
          $ref: "#/components/schemas/Device"
        id:
          type: integer
          format: int32
        release:
          $ref: "#/components/schemas/Release"
        status:
          type: string
        transitioned_at:
          type: string
        updated_date:
          type: string
      example:
        began_at: "2019-05-21T22:19:57.762973+00:00"
        created_date: "2019-05-21T22:19:57.762973+00:00"
        device:
          device_serial: ABCD1234
          hardware_version: evt
          id: 35
        id: 53
        release:
          id: 8
          revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
          version: 1.0.0
        status: success
        transitioned_at: "2019-05-21T22:19:57.771497+00:00"
        updated_date: "2019-05-21T22:19:57.778679+00:00"
    RetrieveanInstall:
      title: RetrieveanInstall
      required:
        - data
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Data30"
      example:
        data:
          began_at: "2019-05-21T22:19:57.762973+00:00"
          created_date: "2019-05-21T22:19:57.762973+00:00"
          device:
            device_serial: ABCD1234
            hardware_version: evt
            id: 35
          id: 53
          release:
            id: 8
            revision: 1afd487207fe4a12aa4f77e1ecf1b978cc62d0b3
            version: 1.0.0
          status: success
          transitioned_at: "2019-05-21T22:19:57.771497+00:00"
          updated_date: "2019-05-21T22:19:57.778679+00:00"
  securitySchemes:
    httpBasic:
      type: http
      scheme: basic
    httpBearer:
      type: http
      scheme: bearer
      description: Organization Auth Token (oat_...) passed as Bearer token
security:
  - httpBasic: []
  - httpBearer: []
tags:
  - name: Auth
    description: |-
      Routes handling Authentication with the Memfault service

      A **User** has a registered account on Memfault. A **User** is a member of different **Organizations**,
      which grant them permission to **Organization's** **Projects**.

      ### Schema

      ```
      {
        "id": 1,
        "created_at": "2019-01-19T05:01:13.000000+00:00",
        "updated_at": "2019-01-19T05:01:13.000000+00:00",
        "email": "user@example.com"
      }
      ```
  - name: Projects
    description: |-
      A **Project** is the next largest construct after **Organization**. It contains **Devices**, **Releases**, **Events**, **Issues**, **Deployments**, etc.


      ### Route Parameters

      > The **Project** `slug` should be used whenever referencing a **Project** in an API or URL.


      ### Request Schema

      | Field                   | Type     | Description                                                     |
      |:------------------------|:---------|:----------------------------------------------------------------|
      | `name` <br />**Required** | `String` | Name of the **Project** <br />Example: `"Awesome Project"`        |
      | `slug` <br />**Required** | `String` | A *unique* URL compatible slug <br />Example: `"awesome-project"` |
      | `platform`              | `String` | The platform of the **Project** <br />Example: `nRF5x`            |
      | `os`                    | `String` | The operating system of the **Project** <br />Example: `FreeRTOS` |


      ### Query Parameters

      The following parameters can be used to filter **Projects**.

      | Query Parameter | Type       | Description                                                   |
      |:----------------|:-----------|:--------------------------------------------------------------|
      | `name`          | `String[]` | Name of the **Project** <br />Example: `"Awesome%20Project"`    |
      | `platform`      | `String[]` | Platform of the **Project** <br />Example: `"nRF5x"`            |
      | `os`            | `String[]` | Operating System of the **Project** <br />Example: `"FreeRTOS"` |

      | Sort Parameter | Type       | Description  |
      |:---------------|:-----------|:-------------|
      | `created_date` | `DateTime` | Date created |


      ### Response Schema

      ```JSON
      {
        "data": {
          "id": 1,
          "created_date": "2019-01-19T05:01:13.000000+00:00",
          "updated_date": "2019-01-19T05:01:13.000000+00:00",
          "name": "Awesome Project",
          "slug": "awesome-project",
          "platform": "nRF5x",
          "os": "FreeRTOS",
          "api_key": "87c2ca9d3ec148ac82034fc2724ff614",
          "count_devices": 47
        }
      }
      ```
  - name: Artifacts
    description: |
      An **Artifact** is a single file or binary for a particular *Hardware Version* that is installed onto a **Device**. A single **Release** object will contain many **Artifacts**.


      ### Request Schema

      > NOTE: This data is passed in as `form-data`, not `JSON`

      | Field                               | Type     | Description                                                                                           |
      |:------------------------------------|:---------|:------------------------------------------------------------------------------------------------------|
      | `type` <br />**Required**             | `String` | Type of **Artifact**. Choices: `firmware`, `symbols`.                                                 |
      | `hardware_version` <br />**Required** | `String` | *Hardware Version* for the **Device** <br />Example: `"hwrev1"`                                         |
      | `build_id`                          | `Text`   | Build Unique Identifier set by the customer <br />Example: `"8be26a9f3b9127bc898f34e05a30a9a2c706cf43"` |
      | `filename`                          | `JSON`   | Filename of the object being uploaded <br />Example: `"firmware_1.2.3_hwrev1.bin"`                      |

      ### Query Parameters

      The following parameters can be used to filter **Releases**.

      | Query Parameter | Type        | Description                                           |
      |:----------------|:------------|:------------------------------------------------------|
      | `types`         | `String[,]` | Type of the **Artifact** <br />Example: `"firmware"`    |
      | `sort`          | `String`    | Sort keys (listed below) <br />Example: `-created_date` |


      ### Sort Parameters

      | Sort Parameter | Type       | Description                 |
      |:---------------|:-----------|:----------------------------|
      | `created_date` | `DateTime` | Date the object was created |


      ### Response Schema

      ```JSON
      {
        "data": {
          "id": 1,
          "created_date": "2019-01-19T05:01:13.000000+00:00",
          "updated_date": "2019-01-19T05:01:13.000000+00:00",
          "type": "firmware",
          "hardware_version": "hwrev1",
          "build_id": "8be26a9f3b9127bc898f34e05a30a9a2c706cf43",
          "filename": "firmware_1.2.3_hwrev1.bin",
          "url": "<some_s3_link>",
          "md5": "54d0fdc208dfef97243c7eadce32797b"
        }
      }
      ```
  - name: Releases
    description: |-
      A **Release** is a single revision or snapshot of your code that you eventually **Deploy** to a **Cohort**. A single **Release** object will contain many **Artifacts** which are binaries specific to a particular *Hardware Version*.

      ### Route Parameters

      > The **Release** `version` should be used whenever referencing a **Release** in an API or URL.

      ### Request Schema

      | Field                      | Type     | Description                                                                                                                    |
      |:---------------------------|:---------|:-------------------------------------------------------------------------------------------------------------------------------|
      | `version` <br />**Required** | `String` | Short Version of the **Release** <br />Example: `"1.2.3"`                                                                        |
      | `min_version`              | `String` | Short Version of the minimum required version to update to this **Release** <br />Example: `"1.0.0"`                             |
      | `revision`                 | `String` | Commit reference or hash <br />Example: `"11d95ef20f7a048ce1da1a6891dd3e2f92c89d85"`                                             |
      | `notes`                    | `Text`   | Client provided notes (HTML, etc) about the release. Useful for Release Notes <br />Example: `"<ul><li>Fix bug #1234</li></ul>"` |
      | `extra_info`               | `JSON`   | Client provided metadata about the release <br />Example: `{"anything": "you_want"}`                                             |

      ### Query Parameters

      The following parameters can be used to filter **Releases**.

      | Query Parameter    | Type       | Description                                                                                                            |
      |:-------------------|:-----------|:-----------------------------------------------------------------------------------------------------------------------|
      | `revision`         | `String[]` | Revision (generally commit hash) of the **Release** <br />Example: `"11d95ef20f7a048ce1da1a6891dd3e2f92c89d85"`          |
      | `version`          | `String[]` | Version string of the **Release** <br />Example: `1.0.0`                                                                 |
      | `hardware_version` | `String[]` | *Hardware Version* that is associated with the **Release** <br />Example: `-created_date`                                |
      | `build_id`         | `String[]` | Filter by Build Identifiers of the **Release's** **Artifacts** <br />Example: `8be26a9f3b9127bc898f34e05a30a9a2c706cf43` |
      | `sort`             | `String`   | Sort keys (listed below) <br />Example: `-created_date`                                                                  |


      ### Sort Parameters

      | Sort Parameter | Type       | Description                 |
      |:---------------|:-----------|:----------------------------|
      | `created_date` | `DateTime` | Date the object was created |


      ### Response Schema

      ```JSON
      {
        "data": {
          "id": 2,
          "created_date": "2019-01-19T05:01:13.000000+00:00",
          "updated_date": "2019-01-19T05:01:13.000000+00:00",
          "version": "1.2.3",
          "min_version": "1.0.0",
          "revision": "11d95ef20f7a048ce1da1a6891dd3e2f92c89d85",
          "notes": "<h1>Release Notes</h1><ul><li>Fix bug #1234</li><li>New Feature XYX</li></ul>",
          "extra_info": {
            "anything": "you_want",
            "ci_system": "Jenkins",
            "build_system": "GNU Make",
            "build_time_s": 384,
          },
          "count_devices": 47
        }
      }
      ```
  - name: Cohorts
    description: |-
      A **Cohort** is a collection of devices that will be given a particular **Release** of the user's choosing. One will create a **Deployment** to give a particular **Release** to a **Cohort**.


      ### Route Parameters

      > The **Cohort** `slug` should be used whenever referencing a **Cohort** in an API or URL.


      ### Request Schema

      | Field                   | Type     | Description                                          |
      |:------------------------|:---------|:-----------------------------------------------------|
      | `name` <br />**Required** | `String` | Name of the **Cohort** <br />Example: `"Beta Channel"` |
      | `slug`                  | `String` | Slug of the **Cohort** <br />Example: `"beta"`         |


      ### Query Parameters

      The following parameters can be used to filter **Cohorts**.

      | Query Parameter | Type       | Description                                            |
      |:----------------|:-----------|:-------------------------------------------------------|
      | `name`          | `String[]` | Name of the **Cohort** <br />Example: `"Beta%20Channel"` |
      | `slug`          | `String[]` | Slug for the **Cohort** <br />Example: `"beta"`          |
      | `sort`          | `String`   | Sort keys (listed below) <br />Example: `-created_date`  |

      ### Sort Parameters

      | Sort Parameter | Type       | Description                 |
      |:---------------|:-----------|:----------------------------|
      | `created_date` | `DateTime` | Date the object was created |


      ### Response Schema

      ```JSON
      {
        "data": {
          "id": 2,
          "created_date": "2019-01-19T05:01:13.000000+00:00",
          "updated_date": "2019-01-19T05:01:13.000000+00:00",
          "name": "Production",
          "slug": "prod",
          "deployments": [
            {
              "id": 1,
              "type": "normal",
              "status": "done",
              "deployer": {
                "id": 1,
                "email": "user@example.com",
                "name": "Robert S"
              },
              "release": {
                "id": 2,
                "version": "1.2.3",
                "revision": "11d95ef20f7a048ce1da1a6891dd3e2f92c89d85"
              },
            }
          ],
          "count_devices": 24,
        }
      }
      ```
  - name: Deployments
    description: |-
      A **Deployment** is a publish event of a **Release** to a **Cohort**.


      ### Request Schema

      | Field                      | Type     | Description                                                                                   |
      |:---------------------------|:---------|:----------------------------------------------------------------------------------------------|
      | `type` <br />**Required**    | `String` | `normal` or `staged_rollout` <br />Example: `"normal"`                                          |
      | `release` <br />**Required** | `String` | **Release** ID or Slug <br />Example: `"1.2.3"`                                                 |
      | `cohort` <br />**Required**  | `String` | **Cohort** ID or Slug <br />Example: `"beta"`                                                   |
      | `extra_info`               | `JSON`   | Extra data. Memfault won't process this data, but will store it along with the **Deployment** |


      ### Query Parameters

      The following parameters can be used to filter **Deployments**.

      | Query Parameter                      | Type       | Description                                                                 |
      |:-------------------------------------|:-----------|:----------------------------------------------------------------------------|
      | `release`                            | `String[]` | Versions of **Releases** <br />Example: `release=1.2.3&release=1.2.4`         |
      | `cohort`                             | `String[]` | Names of **Cohorts** <br />Example: `cohort=alpha&cohort=beta`                |
      | `since`                              | `DateTime` | Deployed after this date <br />Example: `"2019-01-19T05:01:13.000000+00:00"`  |
      | `until`                              | `DateTime` | Deployed before this date <br />Example: `"2019-01-19T05:01:13.000000+00:00"` |
      | `sort` <br />Default: `-deployed_date` | `String`   | Sort keys (listed below) <br />Example: `-deployed_date`                      |


      ### Sort Parameters

      | Sort Parameter  | Type       | Description                         |
      |:----------------|:-----------|:------------------------------------|
      | `deployed_date` | `DateTime` | Date the **Deployment** was created |


      ### Response Schema

      ```JSON
      {
        "data": {
          "id": 1,
          "created_date": "2019-01-19T05:01:13.000000+00:00",
          "updated_date": "2019-01-19T05:01:13.000000+00:00",
          "deployed_date": "2019-01-19T05:01:13.000000+00:00",
          "type": "staged_rollout",
          "status": "done",
          "rollout_percent": 100,
          "release": {
            "id": 2,
            "version": "1.2.3",
            "revision": "11d95ef20f7a048ce1da1a6891dd3e2f92c89d85"
          },
          "cohort": {
            "id": 1,
            "name": "Beta Channel",
            "slug": "beta"
          },
          "deployer": {
            "id": 1,
            "email": "user@example.com",
            "name": "Robert S"
          },
          "extra_info": {
            "anything": "you_want",
            "ci_system": "Jenkins"
          }
        }
      }
      ```
  - name: Devices
    description: |-
      A **Device** is a unit in the field, e.g. A smartwatch built by a company and purchased by a customer.


      ### Route Parameters

      > The **Device** `device_serial` should be used whenever referencing a **Device** in an API or URL.


      ### Request Schema

      | Field                               | Type     | Description                                                                                                                     |
      |:------------------------------------|:---------|:--------------------------------------------------------------------------------------------------------------------------------|
      | `device_serial` <br />**Required**    | `String` | A unique identifier for a **Device**. Usually a serial number, MAC address, etc. <br />Example: `"ABCD1234"`                      |
      | `owner_ref` <br />**Required**        | `String` | A unique identifier for an *Owner* of the device. Internal to the client. <br />Example: `"awesome_employee_1234"`                |
      | `hardware_version` <br />**Required** | `String` | *Hardware Version* for the **Device**. Different *Hardware Versions* will have different **Artifacts**. <br />Example: `"hwrev1"` |


      ### Query Parameters

      The following parameters can be used to filter **Devices**.

      | Query Parameter    | Type       | Description                                                                                                      |
      |:-------------------|:-----------|:-----------------------------------------------------------------------------------------------------------------|
      | `release`          | `String[]` | **Devices** reporting these **Releases** as their `last_seen_release` <br />Example: `release=1.2.3&release=1.2.4` |
      | `owner_ref`        | `String[]` | Owner UIDs (provided by client) of the **Devices** <br />Example: `owner_ref=user1234&owner_ref=user5678`         |
      | `last_seen_since`  | `DateTime` | *Last Seen* timestamp is after this date <br />Example: `"2019-01-19T05:01:13.000000+00:00"`                       |
      | `last_seen_until`  | `DateTime` | *Last Seen* timestamp is before this date <br />Example: `"2019-01-19T05:01:13.000000+00:00"`                      |
      | `hardware_version` | `String[]` | Hardware Versions <br />Example: `"hwrev1"`                                                                        |
      | `sort`             | `String`   | Sort keys (listed below) <br />Example: `-deployed_date`                                                           |


      ### Sort Parameters

      | Sort Parameter | Type       | Description                       |
      |:---------------|:-----------|:----------------------------------|
      | `last_seen`    | `DateTime` | Date the **Device** was last seen |


      ### Response Schema

      ```JSON
      {
        "data": {
          "id": 1,
          "created_date": "2019-01-19T05:01:13.000000+00:00",
          "updated_date": "2019-01-19T05:01:13.000000+00:00",
          "device_serial": "ABCD1234",
          "owner_ref": "awesome_employee_1234",
          "hardware_version": "hwrev1",
          "last_seen": "2019-01-19T05:01:13.000000+00:00",
          "last_seen_release": {
            "id": 2,
            "version": "1.2.3",
            "revision": "11d95ef20f7a048ce1da1a6891dd3e2f92c89d85"
          },
          "cohort": {
            "id": 1,
            "name": "Beta Channel",
            "slug": "beta"
          }
        }
      }
      ```
  - name: Events
    description: |-
      An **Event** is a message generated by a **Device**. The types include but are not limited to *Heartbeats*, *Traces*, and *Installs*.


      ### Event Types

      | Event Type  | Description                                             |
      |:------------|:--------------------------------------------------------|
      | `heartbeat` | Contains useful hourly metrics and system vitals        |
      | `trace`     | A **Trace** event, which adheres to the structure below |

      ### Request Schema

      | Event Type                          | Type       | Description                                                                                      |
      |:------------------------------------|:-----------|:-------------------------------------------------------------------------------------------------|
      | `type` <br />**Required**             | `String`   | What type of **Event** this is. One of the *Event Types* above <br />Example: `"heartbeat.hourly"` |
      | `release_version` <br />**Required**  | `String`   | Version of the **Release** installed on the **Device** <br />Example: `"1.2.3"`                    |
      | `device_serial` <br />**Required**    | `String`   | **Device** Unique Identifier (set by client) <br />Example: `ABCD1234` <br />Example: `"ABCD1234"`   |
      | `hardware_version` <br />**Required** | `String`   | *Hardware Version* for the **Device**. <br />Example: `"hwrev1"`                                   |
      | `sdk_version` <br />**Required**      | `String`   | Memfault SDK Version on the **Device** <br />Example: `"0.1.0"`                                    |
      | `captured_date`                     | `DateTime` | Date the device *captured* the event                                                             |
      | `event_info`                        | `JSON`     | **Event** data. Exact schema is determined by the *Event Type*                                   |
      | `extra_info`                        | `JSON`     | Extra data. Memfault won't process this data, but will store it along with the **Event**         |


      ### Event Info Payloads

      The following structures are the only valid objects that are allowed in the `event_info` object of an **Event**.

      #### Heartbeat Event

      A heartbeat is like the "pulse" of a **Device**. It reports the vitals of the system, and gives Memfault an overview of what happened in the last hour.

      The key-value pairs sent in the `event_info.metrics` field are required to be in `string:number` form. These *metrics* are parsed by Memfault and shown in dashboards. These metrics can be anything...be creative!

      Some useful metrics to gather can include but are not limited to:

      - Uptime
      - Battery Percentage
      - Bluetooth Bytes Sent/Received
      - Wi-Fi Bytes Sent/Received
      - Bluetooth Time Connected
      - Heap Bytes Free/Allocated
      - Time Asleep/Awake
      - Flash Bytes Written/Read
      - CPU/MCU Utilization

      It's also useful to record usage metrics of your devices. For example, if we want to record metrics for a Parking Meter, we may also want to record the number of user interactions or number of coins inserted to measure usage.

      | Field     | Type                    | Description                                                                                        |
      |:----------|:------------------------|:---------------------------------------------------------------------------------------------------|
      | `metrics` | `Object[string:number]` | An object of a list of metrics as key:value pairs, where the key is a string and value is a number |

      ```JSON
      {
        "type": "heartbeat",
        "release_version": "1.2.3",
        "device_serial": "ABCD1234",
        "hardware_version": "hwrev1",
        "sdk_version": "0.4.0",
        "event_info": {
          "metrics": {
            "battery_pct": 77,
            "uptime_s": 17663,
            "heap_free_b": 1227
          }
        },
        "extra_info": {
          "whatever": "you_want"
        }
      }
      ```

      #### Trace Event

      An **Event** that is generally recorded and associated with a crash, reset, or assert. This event contains a micro-amount of data about the crash, usually on a few registers and a **Trace** *Reason*. With just this information, Memfault can group these events and surface **Issues**.

      > This is the smallest form of **Traces**. If you are looking for more detail about a particular type of crash, such as getting a full backtrace or a coredump of the system, Memfault can do that too. Please reach out!

      | Field                    | Type                    | Description                                                                                     |
      |:-------------------------|:------------------------|:------------------------------------------------------------------------------------------------|
      | `reason`<br />**Required** | `Object[String:Number]` | The Trace Reason given by the **Device**<br />Example: See Table Below for all possible values    |
      | `pc`<br />**Required**     | `Number`                | Register value of the PC (Program Counter) register at time of the **Trace**<br />Example: 226689 |
      | `lr`                     | `Number`                | Register value of the LR (Link Register) register at time of the **Trace**<br />Example: 226574   |
      | `sp`                     | `Number`                | Register value of the SP (Stack Pointer) register at time of the **Trace**<br />Example: 6712     |

      ```JSON
      {
        "type": "trace",
        "release_version": "1.2.3",
        "device_serial": "ABCD1234",
        "hardware_version": "hwrev1",
        "sdk_version": "0.4.0",
        "event_info": {
          "reason": 32769,
          "pc": 226689,
          "lr": 226574,
          "sp": 6712
        },
        "extra_info": {
          "whatever": "you_want"
        }
      }
      ```

      ##### Trace Reason

      | Reason Name   | Value  | Type               | Notes                                                                            |
      |:--------------|:-------|:-------------------|:---------------------------------------------------------------------------------|
      | UNKNOWN       | 0x0000 | Unknown            |                                                                                  |
      | USER_SHUTDOWN | 0x0001 | Normal             |                                                                                  |
      | USER_RESET    | 0x0002 | Normal             |                                                                                  |
      | FW_UPDATE     | 0x0003 | Normal             |                                                                                  |
      | LOW_POWER     | 0x0004 | Normal             |                                                                                  |
      | ERROR_MASK    | 0x8000 | Error              | Every error below is masked against this value                                   |
      | WDKWWDR       | 0x8000 | Error              | We Don't Know Why We Dangerously Rebooted <br />[wdkwwdr.com](https://wdkwwdr.com) |
      | ASSERT        | 0x8001 | Error              |                                                                                  |
      | WATCHDOG      | 0x8002 | Error              |                                                                                  |
      | BUS_FAULT     | 0x9100 | ARM: Bus Fault     |                                                                                  |
      | IBUSERR       | 0x9101 | ARM: Bus Fault     |                                                                                  |
      | PRECISERR     | 0x9102 | ARM: Bus Fault     |                                                                                  |
      | IMPRECISERR   | 0x9103 | ARM: Bus Fault     |                                                                                  |
      | UNSTKERR      | 0x9104 | ARM: Bus Fault     |                                                                                  |
      | STKERR        | 0x9105 | ARM: Bus Fault     |                                                                                  |
      | LSPERR        | 0x9106 | ARM: Bus Fault     |                                                                                  |
      | BFARVALID     | 0x9107 | ARM: Bus Fault     |                                                                                  |
      | MEM_FAULT     | 0x9200 | ARM: Memory Faults |                                                                                  |
      | IACCVIOL      | 0x9201 | ARM: Memory Faults |                                                                                  |
      | DACCVIOL      | 0x9202 | ARM: Memory Faults |                                                                                  |
      | MUNSTKERR     | 0x9203 | ARM: Memory Faults |                                                                                  |
      | MSTKERR       | 0x9204 | ARM: Memory Faults |                                                                                  |
      | MLSPERR       | 0x9205 | ARM: Memory Faults |                                                                                  |
      | MMARVALID     | 0x9206 | ARM: Memory Faults |                                                                                  |
      | USAGE_FAULT   | 0x9300 | ARM: Usage Faults  |                                                                                  |
      | UNDEFINSTR    | 0x9301 | ARM: Usage Faults  |                                                                                  |
      | INVSTATE      | 0x9302 | ARM: Usage Faults  |                                                                                  |
      | INVPC         | 0x9303 | ARM: Usage Faults  |                                                                                  |
      | NOCP          | 0x9304 | ARM: Usage Faults  |                                                                                  |
      | UNALIGNED     | 0x9305 | ARM: Usage Faults  |                                                                                  |
      | DIVBYZERO     | 0x9306 | ARM: Usage Faults  |                                                                                  |
      | HARD_FAULT    | 0x9400 | ARM: Hard Faults   |                                                                                  |


      ### Query Parameters

      The following parameters can be used to filter **Events**.

      | Query Parameter | Type       | Description                                                                                      |
      |:----------------|:-----------|:-------------------------------------------------------------------------------------------------|
      | `device`        | `String[]` | **Device** Unique Identifier (set by client) <br />Example: `ABCD1234`                             |
      | `type`          | `String[]` | Type of **Event** <br />Example: `"heartbeat"`                                                     |
      | `since`         | `DateTime` | Recorded after this date <br />Example: `"2019-01-19T05:01:13.000000+00:00"`                       |
      | `until`         | `DateTime` | Recorded before this date <br />Example: `"2019-01-19T05:01:13.000000+00:00"`                      |
      | `release`       | `String[]` | Versions of **Releases** <br />Example: `release=1.2.3&release=1.2.4`                              |
      | `cohort`        | `String[]` | **Events** generated by **Devices** in these **Cohorts** <br />Example: `cohort=alpha&cohort=beta` |
      | `sort`          | `String`   | Sort key (listed below) <br />Example: `-created_date`                                             |


      ### Sort Parameters

      | Sort Parameter  | Type       | Description                                                                                     |
      |:----------------|:-----------|:------------------------------------------------------------------------------------------------|
      | `received_date` | `DateTime` | Date the **Event** was received by Memfault                                                     |
      | `captured_date` | `DateTime` | Date the **Event** was recorded on the **Device** <br />NOTE: will equal `received_date` if empty |


      ### Response Schema

      ```JSON
      {
        "data": {
          "type": "heartbeat",
          "device": {
            "id": 1,
            "device_serial": "ABCD1234",
            "hardware_version": "hwrev1"
          },
          "release": {
            "id": 1,
            "version": "1.2.3",
            "revision": "11d95ef20f7a048ce1da1a6891dd3e2f92c89d85"
          },
          "sdk_version": "0.4.0",
          "received_date": "2019-01-19T05:01:13.000000+00:00",
          "captured_date": "2019-01-19T05:01:13.000000+00:00",
          "event_info": {
            "metrics": {
              "heap_free": 43,
              "heap_blocks": 712,
              "anything_else": 0
            }
          },
          "user_info": {
            "anything": "you_want",
            "last_app_opened": "Timer"
          }
        }
      }
      ```
  - name: Issues
    description: |-
      An **Issue** is a logical collection of *Trace* **Events**. Each *Trace* **Event** that is received from a **device** has a unique *Signature*. These *Signatures* are used to group **Events** into **Issues**.

      ### Request Schema

      No write access for **Issues** at the moment. They are automatically populated by sending **Traces** to the server.

      ### Query Parameters

      The following parameters can be used to filter **Issues**.

      | Query Parameter    | Type       | Description                                                                                                         |
      |:-------------------|:-----------|:--------------------------------------------------------------------------------------------------------------------|
      | `status`           | `String[]` | Status of the Issues to query for <br />Example: `status=open&status=resolved`                                        |
      | `title`            | `String`   | Search through the `title` field, using a basic search (where `*` is a wildcard) <br />Example: `*fault*`             |
      | `last_seen_since`  | `DateTime` | Last seen after this date <br />Example: `"2019-01-19T05:01:13.000000+00:00"`                                         |
      | `last_seen_until`  | `DateTime` | Last seen before this date <br />Example: `"2019-01-19T05:01:13.000000+00:00"`                                        |
      | `first_seen_since` | `DateTime` | First seen after this date <br />Example: `"2019-01-19T05:01:13.000000+00:00"`                                        |
      | `first_seen_until` | `DateTime` | First seen before this date <br />Example: `"2019-01-19T05:01:13.000000+00:00"`                                       |
      | `min_device_count` | `Number`   | Minimum device count                                                                                                |
      | `min_crash_count`  | `Number`   | Minimum crash count                                                                                                 |
      | `signature`        | `String[]` | List of signatures of the **Crash** <br />Example: `c7f929860131738beaed6dc626565ce1671d31a6e1e9fa3b90c28271e26610c9` |


      ### Sort Parameters

      | Sort Parameter | Type       | Description                                                                                     |
      |:---------------|:-----------|:------------------------------------------------------------------------------------------------|
      | `last_seen`    | `DateTime` | Date the **Event** was received by Memfault                                                     |
      | `first_seen`   | `DateTime` | Date the **Event** was recorded on the **Device** <br />NOTE: will equal `received_date` if empty |
      | `device_count` | `Number`   | Number of unique **Devices** that have experienced this **Issue**                               |
      | `trace_count`  | `Number`   | Number of **Traces** that have been grouped with this **Issue**                                 |

      ### Response Schema

      ```JSON
      {
        "data": {
          "id": 1,
          "created_date": "2019-04-14T01:18:06.511100+00:00",
          "updated_date": "2019-04-14T01:18:06.541363+00:00",
          "status": "open",
          "title": "Assert at timeout_handler_exec",
          "message": "",
          "resolution": null,
          "signature": "c7f929860131738beaed6dc626565ce1671d31a6e1e9fa3b90c28271e26610c9",
          "counts": [
            5,
            12,
            15,
            15,
            4,
            7,
            4,
            10,
            15,
            10,
            10,
            13,
            9,
            15,
            6,
            4,
            10,
            3,
            9,
            9,
            12,
            15,
            15,
            3
          ],
          "device_count": 3,
          "trace_count": 3,
          "distribution": {
            "hardware_version": [
              {
                "count": 13,
                "version": "qq_pvt"
              },
              {
                "count": 9,
                "version": "xx_evt"
              }
            ],
            "sw_version": [
              {
                "count": 13,
                "version": "0.9"
              },
              {
                "count": 7,
                "version": "1.0.0"
              },
              {
                "count": 9,
                "version": "1.0.1"
              }
            ]
          },
          "first_seen": "2019-04-14T01:18:04.052556+00:00",
          "last_seen": "2019-04-14T01:18:04.055885+00:00",
          "first_release": {
            "id": 2,
            "version": "1.0.0",
            "revision": "4e57be871d1bd83d5d9592daf8e1d20c2fc66382"
          },
          "last_release": {
            "id": 2,
            "version": "1.0.0",
            "revision": "4e57be871d1bd83d5d9592daf8e1d20c2fc66382"
          },
          "last_trace": {
            "id": 3,
            "created_date": "2019-04-14T01:18:04.055867+00:00",
            "captured_date": "2019-04-14T01:18:04.055885+00:00",
            "received_date": "2019-04-14T01:18:04.055881+00:00",
            "title": "Assert at timeout_handler_exec",
            "message": "",
            "reason": "Assert",
            "signature": "c7f929860131738beaed6dc626565ce1671d31a6e1e9fa3b90c28271e26610c9",
            "context": "",
            "release": {
              "id": 2,
              "version": "1.0.0",
              "revision": "4e57be871d1bd83d5d9592daf8e1d20c2fc66382"
            },
            "device": {
              "device_serial": "FB11014FCE12616D",
              "hardware_version": "proto",
              "id": 43
            },
            "entries": {
              "faults": {
                "notes": [],
                "registers": [
                  {
                    "name": "CFSR",
                    "value": 0
                  },
                  {
                    "name": "HFSR",
                    "value": 0
                  },
                  {
                    "name": "SHCSR",
                    "value": 0
                  }
                ]
              },
              "threads": [
                {
                  "tid": 1,
                  "name": "Thread 1",
                  "current": false,
                  "crashed": false,
                  "reporting": false,
                  "registers": [
                    {
                      "name": "r0",
                      "value": 537122332
                    },
                    {
                      "name": "r1",
                      "value": 559170130
                    },
                    {
                      "name": "r2",
                      "value": 3758157060
                    },
                    {
                      "name": "r3",
                      "value": 2147485729
                    },
                    {
                      "name": "r4",
                      "value": 330
                    },
                    {
                      "name": "r5",
                      "value": 0
                    },
                    {
                      "name": "r6",
                      "value": 536895384
                    },
                    {
                      "name": "r7",
                      "value": 0
                    },
                    {
                      "name": "r8",
                      "value": 537122568
                    },
                    {
                      "name": "r9",
                      "value": 0
                    },
                    {
                      "name": "r10",
                      "value": 573785173
                    },
                    {
                      "name": "r11",
                      "value": 17
                    },
                    {
                      "name": "r12",
                      "value": 0
                    },
                    {
                      "name": "sp",
                      "value": 537122328
                    },
                    {
                      "name": "lr",
                      "value": 226689
                    },
                    {
                      "name": "pc",
                      "value": 226574
                    },
                    {
                      "name": "cpsr",
                      "value": 16777249
                    }
                  ],
                  "stacktrace": [
                    {
                      "address": 226574,
                      "arguments": {
                        "lr": "<optimized out>",
                        "pc": "<optimized out>",
                        "extra": "<optimized out>"
                      },
                      "context": [],
                      "file": "/Users/chrisc/dev/memfault/sdk/embedded/src/memfault_fault_handling.c",
                      "frame_size": 24,
                      "frame_type": "normal",
                      "function": "memfault_reboot_tracking_assert_handler",
                      "index": 0,
                      "lineno": 171,
                      "locals": {
                        "info": "{\n  reason = kMfltRebootReason_Assert, \n  pc = 159568, \n  lr = 180385\n}"
                      }
                    },
                    {
                      "address": 180384,
                      "arguments": {
                        "p_timer": "<optimized out>"
                      },
                      "context": [],
                      "file": "../nrf5_sdk/components/libraries/timer/app_timer.c",
                      "frame_size": 0,
                      "frame_type": "inline",
                      "function": "timeout_handler_exec",
                      "index": 1,
                      "lineno": 440,
                      "locals": {
                        "p_timer": "<optimized out>"
                      }
                    },
                    {
                      "address": 180384,
                      "arguments": null,
                      "context": [],
                      "file": "../nrf5_sdk/components/libraries/timer/app_timer.c",
                      "frame_size": 0,
                      "frame_type": "inline",
                      "function": "timer_timeouts_check",
                      "index": 2,
                      "lineno": 440,
                      "locals": {
                        "p_previous_timer": "<optimized out>",
                        "p_timer": "0x20005f98 <m_mflt_metric_log_timer_data>",
                        "ticks_elapsed": "0",
                        "ticks_expired": "330"
                      }
                    },
                    {
                      "address": 180384,
                      "arguments": null,
                      "context": [],
                      "file": "../nrf5_sdk/components/libraries/timer/app_timer.c",
                      "frame_size": 24,
                      "frame_type": "normal",
                      "function": "RTC1_IRQHandler",
                      "index": 3,
                      "lineno": 917,
                      "locals": null
                    },
                    {
                      "address": 4294967273,
                      "arguments": null,
                      "context": [],
                      "file": null,
                      "frame_size": 32,
                      "frame_type": "sigtramp",
                      "function": "<signal handler called>",
                      "index": 4,
                      "lineno": null,
                      "locals": null
                    },
                    {
                      "address": 89946,
                      "arguments": null,
                      "context": [],
                      "file": null,
                      "frame_size": 0,
                      "frame_type": "normal",
                      "function": null,
                      "index": 5,
                      "lineno": null,
                      "locals": null
                    },
                    {
                      "address": 89944,
                      "arguments": null,
                      "context": [],
                      "file": null,
                      "frame_type": "normal",
                      "function": null,
                      "index": 6,
                      "lineno": null,
                      "locals": null
                    }
                  ]
                }
              ]
            }
          }
        }
      }
      ```
  - name: Installs
    description: |-
      An **Install** is an attempt (successful, in progress, or failure) by a **Device** to update to a new **Release** by way of downloading and installing an **Artifact**.

      These are generated from the **Events** sent from the **Device**, and are *read-only*.


      ### Request Schema

      *Read Only*


      ### Query Parameters

      The following parameters can be used to filter **Installs**.

      | Query Parameter | Type       | Description                                                         |
      |:----------------|:-----------|:--------------------------------------------------------------------|
      | `release`       | `String[]` | Versions of **Releases** <br />Example: `release=1.2.3&release=1.2.4` |
      | `device`        | `String[]` | **Device** UIDs of **Devices** <br />Example: `ABCD1234`              |
      | `status`        | `String[]` | Status of the **Install** <br />Example: `success`                    |
      | `sort`          | `String`   | Sort keys (listed below) <br />Example: `-began_at`                   |


      ### Sort Parameters

      | Sort Parameter    | Type       | Description                                 |
      |:------------------|:-----------|:--------------------------------------------|
      | `began_at`        | `DateTime` | Date the **Install** was started at         |
      | `transitioned_at` | `DateTime` | Date the **Install** last changed states at |


      ### Response Schema

      ```JSON
      {
        "data": {
          "id": 1,
          "created_date": "2019-01-19T05:01:13.000000+00:00",
          "updated_date": "2019-01-19T05:01:13.000000+00:00",
          "started_at": "2019-01-19T05:01:13.000000+00:00",
          "transitioned_at": "2019-01-19T05:01:13.000000+00:00",
          "status": "success",
          "device": {
            "id": 1,
            "device_serial": "ABCD1234",
            "hardware_version": "hwrev1",
            "last_seen": "2019-01-19T05:01:13.000000+00:00",
          },
          "release_to": {
            "id": 2,
            "version": "1.2.3",
            "revision": "11d95ef20f7a048ce1da1a6891dd3e2f92c89d85"
          },
          "release_from": {
            "id": 1,
            "version": "1.2.2",
            "revision": "bd0bfa48e91d1366cfad7ec2c408016c487ee5e4"
          }
        }
      }
      ```
  - name: Upload
    description: "The Upload endpoint is used to upload files from a **Device** or another API to the Memfault service. "
  - name: Tasks
    description: For long running jobs, Memfault will issue it as a background *Task* and give back a `202 Accepted` response with a `Location` header.
