# Rows

A row is a component of a sheet or report. Each row is composed of a
collection of cells, and may optionally contain discussions or
attachments.

A row is comprised of a collection of cells, and may optionally contain attachments and discussions.

<h2>Row Attachments</h2>

For details about working with a row's attachments, see [Attachments](/api/smartsheet/openapi/attachments).

<h2>Row Cells</h2>

For details about working with a row's cells, see [Cells](/api/smartsheet/openapi/cells).

For details about working with images in cells, see [Cell Images](/api/smartsheet/openapi/cellimages).

<h2>Row Discussions</h2>

For details about working with a row's discussions, see [Discussions](/api/smartsheet/openapi/discussions).

<h2>Row Include Flags</h2>

Endpoints which return rows (for example, [Get Sheet](/api/smartsheet/openapi/sheets/getsheet), [Get Row](/api/smartsheet/openapi/rows/row-get)) support the optional **include** query string parameter. If specified, the value of the **include** parameter is
a comma-delimited list of flags that indicate additional attributes to be included in each [Row object](/api/smartsheet/openapi/rows/row) within the response.

Include Flag | Description |
-------------|-------|
**attachments**	| Includes row **attachments** array.<br/>To include discussion attachments, both **attachments** and **discussions** must be present in the include list.
**columnType**	| Includes **columnType** attribute in the row's [cells](/api/smartsheet/openapi/cells/cell) indicating the type of the column the cell resides in.
**discussions**	| Includes row **discussions** array.<br/>To include discussion attachments, both **attachments** and **discussions** must be present in the include list.
**filters**		| Includes **filteredOut** attribute indicating if the row should be displayed or hidden according to the sheet's filters.
**format**		| Includes **format** attribute on the row, its cells, or summary fields.  See [Cell formatting](/api/smartsheet/guides/advanced-topics/cell-formatting).
**objectValue** | Includes **objectValue** attribute on cells containing values. For more information see [Cell Reference](/api/smartsheet/openapi/cells).
**proofs** | Includes row **proof** object containing proof information associated with the row. For more information see [Proof](/api/smartsheet/openapi/proofs/proof).
**rowPermalink** | Includes **permalink** attribute that represents a direct link to the [row](/api/smartsheet/openapi/rows/row) in the Smartsheet application.
**rowWriterInfo** | **DEPRECATED** Includes **createdBy** and **modifiedBy** attributes on the row, indicating the row's creator, and last modifier.
**writerInfo** | Includes **createdBy** and **modifiedBy** attributes on the row or summary fields, indicating the row or summary field's creator, and last modifier.

<h2>Specify Row Location</h2>

When you [add a row](/api/smartsheet/openapi/rows/rows-addtosheet), the default behavior is for Smartsheet to put the new row at the bottom of the sheet. And when you [update a row](/api/smartsheet/openapi/rows/update-rows), the default behavior is to keep the row where it is. It is not necessary to use a location-specifier if you want the default behavior.

To place a rows at a location other than the operation's default location, use a location specifier pattern that matches your target location. Each location specifier is an optional [Row](/api/smartsheet/openapi/rows/row) attribute. The table details target locations and demonstrates example patterns (in JSON) to use in the Row objects request bodies of the add/update row operation you're calling.

Target Location | Location Specifiers | Row Property Examples (JSON) |
-------|--------|--------|
Top of a sheet | **toTop** | ```"toTop": true```
Bottom of a sheet | **toBottom** (for updating a row only; bottom is default for adding a row) | ```"toBottom": true```
Top of an indented section (that is, first child row) | **parentId** | ```"parentId": 8896508249565060```
Bottom of an indented section (that is, last child row) | **parentId** +<br/>**toBottom** | ```"parentId": 8896508249565060, "toBottom": true```
Below a specific row, at the same indent level | **siblingId** | ```"siblingId": 8896508249565060```
Above a specific row, at the same indent level | **siblingId** +<br/>**above** | ```"siblingId": 8896508249565060, "above": true```
Indent an existing row, must have a value of "1" | **indent** | ```"indent": 1```
Outdent an existing row, must have a value of "1" | **outdent** | ```"outdent": 1```

Follow these location specifier rules:

* Use only one location-specifier pattern per request.
* If you're adding/updating multiple rows, use the same location-specifier pattern for each row.
* If you specify a **parentId** attribute, don't also specify a **siblingId** attribute.
* If you specify a **siblingId** attribute, don't also specify a **parentId**, **toTop**, or **toBottom** attribute.


