# Custom fields

> The extra registration details of members (company, job title, city, ticket type) - types, required, who sees and who edits them, the request to complete registration on the next visit and the variable in campaigns.

**Custom fields** are the details the community wants to keep about each member beyond name, email and phone: company, job title, city, date of birth, ticket type. The team creates the fields once; the values show up on each member's record, in the person's own profile and in email campaigns.

## What it's for

| Community | Fields |
|---|---|
| Association | *Company*, *Job title*, *Member number* |
| Event | *Ticket type* (choice), *City* |
| School | *Class*, *Enrollment date* |
| Coworking | *Floor*, *Has a parking spot* (yes/no) |

## How it works

### The types

| Type | What for | Example |
|---|---|---|
| **Text** | Any short text | Company |
| **Number** | A number | Member number |
| **Date** | A date | Date of birth |
| **Choice** | One option from a list (at least two) | Ticket type: VIP, In person, Online |
| **Yes/no** | A yes or no answer | Has a parking spot |

The type **can't change** once any member has a value filled in: *"The type cannot change once values are filled in."*

### Required

A **Required** field must be filled in by everyone. Whoever lacks the value (an older member, an imported one or a new one) sees, on their **next visit** to the community, the **Complete your registration** window (*"{community name} asks for this information before you go on."*) and only goes on after filling it in and clicking **Save and continue**. Anyone who prefers can **Sign out**.

The [spreadsheet import](/membros/importar-membros) never blocks a row for an empty required field; the person completes it on their first visit.

### Who sees and who edits

| Who | Sees | Edits the values |
|---|:-:|:-:|
| Owner, admin and moderator | Everyone's | Everyone's |
| Finance | Everyone's | Only their own |
| The member themself | Their own | Their own |
| Another member | — | — |

Creating, editing, reordering and deleting **fields** belongs to the owner and admins. Moderators and finance see the tab read-only: *"You can see the fields, but only owner and admin create, edit or delete them."*

The fields don't show on the public profile: another member doesn't see anyone's company or job title.

> [!TIP]
> The screen itself reminds you: *"Do not ask for sensitive data (health, religion, documents) unless needed."*

### Where the values show up

- **Member record** (team): in **Administration › Members**, when editing the person, the **Additional information** section, with **Save information**. For someone who joined through an import, it also shows *"Origin: spreadsheet import on …"*.
- **My Account** (the member themself): the **Additional information** card, *"Fields the community asks for at registration."*
- **Email campaigns:** each field becomes a variable (below).

### In campaigns

Each field becomes the variable `{{field_<key>}}`, where the key is the field's name without accents, in lowercase and with `_` in place of spaces: the *Company* field becomes `{{field_company}}`, *Ticket type* becomes `{{field_ticket_type}}`. `{{campo_<key>}}` also works. The key is born with the field and doesn't change, even if the name changes later.

In the editor, **Insert variable** shows the fields in the **Community fields** group, with the right name. The value is formatted for whoever receives it: dates in the person's language, yes/no translated, a choice by its option. For people without a value, use the fallback text: `{{field_company|your company}}`. See [Per-recipient variables](/notificacoes/campanhas-de-email#per-recipient-variables).

### Deleting a field

The field disappears from the tab, the record, the profile and the campaign variables. Values already filled in **are kept**. A campaign that still uses the variable of a deleted field is refused on save or send.

## Step by step

*Role: owner or admin.*

1. **Administration › Members**, **Custom fields** tab, **New field** button.
2. **Field name** (e.g. *Company*) and **Type**. For a **Choice**, write the **Options** (**Add option** for another one).
3. Tick **Required** if everyone must fill it in.
4. **Save**. Use **Move up** and **Move down** to change the order in which fields show on the record and the profile.

To fill in someone's value: **Administration › Members**, edit the person and use **Additional information**.

## Examples

**An association asking for the company.** The admin creates *Company* (Text, required). On their next visit, each member sees **Complete your registration** and fills it in. The conference campaign opens with *"{{first_name}}, has {{field_company|your company}} booked its seat yet?"*.

**An event importing the ticket type.** In the [import](/membros/importar-membros), the *Ticket type* column goes to **+ New custom field**; Memberfy suggests **Choice**, because the values repeat. Afterwards, the team sees on each person's record whether they are VIP, In person or Online.

## Common errors and how to fix them

| Message | What to do |
|---|---|
| *Give the field a name.* | Fill in the **Field name** |
| *A choice needs at least two options.* | Add another option |
| *Fill in {field}.* | The field is required and can't be left empty |
| *Read-only: owner, admin and moderator edit these values.* | Finance only sees other people's values |
| The type can't be changed | There are values filled in already; create a new field |

## Frequently asked questions

**Does a member see other people's fields?**
No. Each member sees only their own; the team sees everyone's.

**Can I filter a campaign's audience by a field?**
Not yet. For now, use [Tags](/membros/tags) or [Groups](/membros/grupos-e-organograma) to pick people.

## Through the assistant

`list_member_fields`, `create_member_field`, `update_member_field`, `reorder_member_fields`, `delete_member_field` (asks for confirmation) and `update_member_field_values`. See [Tools · Members](/mcp/ferramentas-membros#custom-fields).

## In the API

`GET` and `POST /api/member-fields`, `PATCH` and `DELETE /api/member-fields/{id}`, `PUT /api/member-fields/order` and `PUT /api/profiles/{profileId}/fields`. The values come in `fields` from `GET /api/profiles/{id}`, only for the team and the member themself. See [Member Fields](/api/referencia/member-fields) in the API reference.

## Related

- [Import members from a spreadsheet](/membros/importar-membros)
- [Manage members](/membros/gerenciar-membros)
- [E-mail campaigns](/notificacoes/campanhas-de-email)
