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

# App configuration

> Define the configuration schema for a custom integration app.

## **App schema**

Each app should follow strict schema with the following structure (all fields are required):

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Type</th>
      <th>Description</th>
      <th>Example</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>name</td>
      <td>string</td>
      <td>Name</td>
      <td>"MyApp"</td>
    </tr>

    <tr>
      <td>website</td>
      <td>string</td>
      <td>Website</td>
      <td>"[http://myawesomeapp.com](http://myawesomeapp.com)"</td>
    </tr>

    <tr>
      <td>version</td>
      <td>string</td>
      <td>Version</td>
      <td>"1.0.0"</td>
    </tr>

    <tr>
      <td>description</td>
      <td>string</td>
      <td>Description</td>
      <td>"My awesome app"</td>
    </tr>

    <tr>
      <td>authentication</td>
      <td>Array</td>
      <td>Authentications</td>
      <td>`[{id: "none", name: "no auth"}]`</td>
    </tr>

    <tr>
      <td>sources</td>
      <td>Array</td>
      <td>Empty array</td>
      <td>`[]`</td>
    </tr>

    <tr>
      <td>responsibleFor</td>
      <td>Object</td>
      <td>Responsibilities</td>

      <td>
        ```json theme={null}
        {
          "dataSynchronization": true,
          "dataImport": false,
          "automations": true
        }
        ```

        <ul>
          <li>`dataSynchronization` — your custom app will be visible in the list of available integrations</li>
          <li>`dataImport` — your custom app will be visible in the list of available imports</li>
          <li>`automations` — your custom app will be visible in the list of available automation actions</li>
        </ul>
      </td>
    </tr>
  </tbody>
</table>

## **Authentication**

Authentication model represents type of authentication in app and has following structure:

| Name        | Type   | Description                   | Required | Example                                                                                                            |
| ----------- | ------ | ----------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
| id          | string | Identity of authenticaiton    | true     | "oauth" or "token"                                                                                                 |
| name        | string | Name of authentication        | true     | "Connection Settings"                                                                                              |
| description | string | Description of authentication | false    | "Give the name for connection"                                                                                     |
| fields      | Array  | Authentication fields         | false    | `[{optional: false, id: "accountName", name: "Title", type: "text", description: 'Give the name for connection'}]` |

If your app doesn't require authentication, add authentication with *id* = "none". In the case you can omit *fields*.

## **Authentication field**

Authentication field represents the field in account. So account that will send to API endpoints will consist of the authentication fields. Authentication field has following structure:

| Name        | Type    | Description                                              | Required | Example                        |
| ----------- | ------- | -------------------------------------------------------- | -------- | ------------------------------ |
| id          | string  | Id of field. The id will be specified in account object. | true     | "accountName"                  |
| name        | string  | Name of the field. Will be displayed in auth form.       | true     | "Title"                        |
| type        | string  | Type of the field                                        | true     | "text"                         |
| description | string  | Description of the field                                 | true     | "Give the name for connection" |
| optional    | boolean | Is the field optional                                    | false    | false                          |
| value       | string  | Default value of the field                               | false    | null                           |

Read about [Custom App: Fields](/guides/integrations/fields). Note that authentication field with some types requires more information to specify. For example, for *highlightText* type you also need to specify *editorMode* in authentication field.

## **Filter**

Filter represents filter that will be applied on data. Filter has following structure:

| Name     | Type    | Description                                                     | Required | Example |
| -------- | ------- | --------------------------------------------------------------- | -------- | ------- |
| id       | string  | Id of filter                                                    | true     | "table" |
| title    | string  | Title of filter                                                 | true     | "Table" |
| type     | string  | Type of filter                                                  | true     | "list"  |
| datalist | boolean | Is filter has values to select from                             | false    | true    |
| optional | boolean | Is filter optional                                              | false    | false   |
| secured  | boolean | Secured filter values are not available for change by non-owner | false    | true    |

See [Integration Filters](/guides/integrations/filters).

Some additional properties should be specified in case when filters should be displayed in special modes, for example JSON or SQL. For example, for *highlightText* type you also need to specify *editorMode* for the filter field.
