> ## Documentation Index
> Fetch the complete documentation index at: https://docs.studentpulse.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Attributes

> Describe Groups, Participants, and Replies with reusable categories and values.

An Attribute is a data point used to describe a student or their context. Examples include campus, term, programme, and study year.

Each Attribute value has a stable StudentPulse ID, a category key, and a label. The label can have translations. Several values can share a key.

| Category key | Example label | Meaning |
| - | - | - |
| `campus` | North | A campus value. |
| `term` | 2026/27 | An academic term. |
| `programme_name` | Biology | A programme name. |
| `student_study_year` | 1 | A study year. |

The category is `campus`. The value is `North`. Another value, `South`, belongs to the same category.

## How Attributes relate to other records

| Record | How you use Attributes |
| - | - |
| [Group](/integrations/groups) | Describe a class or course. Its Attributes are added when its Check-in link resolves. |
| [Participant](/integrations/participants) | Save values directly on an individual record. A Participant can have Attributes without a Group. |
| Reply | Keep the context collected when the student answers a Check-in. A Reply can have Attributes without Group context. |

An Attribute is not a Group or a Check-in assignment. A campus value alone does not select a unique class.

Participant memberships and Reply Attributes are separate records. Do not assume that a Participant edit rewrites past Replies. Do not assume that a Participant's saved Attributes appear in every Reply without a configured collection flow.

## Names and source IDs

StudentPulse pairs these name categories with source-system IDs:

| Name key | Identifying key |
| - | - |
| `course_name` | `course_id` |
| `class_name` | `class_id` |
| `programme_name` | `programme_id` |
| `module_name` | `module_id` |

Keep source IDs stable when labels change. The external ID attached to an Attribute value is different from its StudentPulse ID. It is also different from the external Group ID.

Broad categories include `term`, `level`, `student_study_year`, `student_semester`, `study_type`, `faculty`, `department`, `campus`, and `other`. Several Groups can share each value.

## Attribute CSV example

Use the Attribute import to create or update reusable values. Save this example as a UTF-8 `.csv` file:

```csv theme={null}
Attribute category*,Attribute value*,Attribute ID
Campus,North,
Campus,South,
Term,2026/27,
Programme name,Biology,BIO
Class name,Biology 1A,BIO-1A-2026
```

Keep all three headers in this order. The asterisks in `Attribute category*` and `Attribute value*` are part of the required headers. Include the `Attribute ID` header even when its cells are empty.

| Column | Meaning |
| - | - |
| `Attribute category*` | The category name. Spaces become underscores in the stored key. `Programme name` becomes `programme_name`. |
| `Attribute value*` | The value label, stored in the Organization's default language. |
| `Attribute ID` | An optional external source-system ID. It is not the StudentPulse Attribute ID. |

Use one row per value. Keep external IDs stable when you rename values. With an external ID, the import matches within the category by that ID. Without one, it matches the value label within the category. Review the proposed changes and any matching errors before you confirm the import.

This file creates Attribute values. It does not assign them to Groups or Participants. Use the [Group CSV](/integrations/groups#group-csv-example) or [Participant CSV](/integrations/participants#import-from-csv) for those assignments.

## Incoming institution context

A configured integration can supply a map such as:

```json theme={null}
{
  "class_id": "BIO-1A-2026",
  "campus": "North",
  "term": "2026/27"
}
```

This example describes the data mapping. It is not a public request endpoint. Agree the entry flow with StudentPulse.

Recognized values support Group matching and Reply context. Unknown keys are ignored. A recognized value that is not yet stored can be added to the Reply context. This does not create a Group or attach the value to a Group.

## Choose values for Participant imports

The Participant CSV uses existing Attribute labels. It does not use category keys or external IDs. Separate several labels with semicolons.

The import matches labels across stored languages without case sensitivity. Each label must identify one existing value. If two Attributes share a label, the import reports an ambiguous match. Unknown labels also block the import.

See [Participants](/integrations/participants) for the CSV format. Attribute availability in dashboard filters depends on your access and the screen.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.