> Portal Navigation: > > - Append `.md` to any URL under `https://dev.wix.com/docs/` to get its markdown version. > - Pages are either content pages (article or reference text) or menu pages (a list of links to child pages). > - To get a menu page, truncate any URL to a parent path and append `.md` (e.g. `https://dev.wix.com/docs/sdk.md`, `https://dev.wix.com/docs/sdk/core-modules.md`). > - Top-level index of all portals: https://dev.wix.com/docs/llms.txt > - Full concatenated docs: https://dev.wix.com/docs/llms-full.txt # Method name: findOrCreateExtendedField(extendedFieldInfo: ExtendedFieldInfo, options: AuthOptions) # Method package: wixCrmBackend # Method menu location: wixCrmBackend --> Contacts --> findOrCreateExtendedField # Method Link: https://dev.wix.com/docs/velo/apis/wix-crm-backend/contacts/find-or-create-extended-field.md # Method Description: Retrieves a custom field with a given name, or creates one if it doesn't exist. The `findOrCreateExtendedField()` function returns a Promise that resolves when the specified custom field is found or created. Successful calls to `findOrCreateExtendedField()` always return an [extended field](wix-crm-backend/contacts/about-extended-fields), which can be passed to subsequent function calls. To find an existing extended field without potentially creating a new one, use [`getExtendedField()`](wix-crm-backend/contacts/get-extended-field) or [`queryExtendedFields()`](wix-crm-backend/contacts/query-extended-fields). > **Note:** > Only visitors with > **Manage Contacts** [permissions](https://www.wix.com/my-account/site-selector/?buttonText=Select%20Site&title=Select%20a%20Site&autoSelectOnSingleSite=true&actionUrl=https:%2F%2Fwww.wix.com%2Fdashboard%2F%7B%7BmetaSiteId%7D%7D%2Froles-and-permissions) > can find or create extended fields. > You can override the permissions by setting the `suppressAuth` option to `true`. # Method Code Examples: *** Note: do not assume any prop names or enum values other than the ones in the example. ## Create an extended field ```javascript import { Permissions, webMethod } from 'wix-web-module'; import { contacts } from 'wix-crm-backend'; export const myFindOrCreateExtendedFieldFunction = webMethod(Permissions.Anyone, () => { const extendedFieldInfo = { displayName: "Last Contacted", dataType: "DATE" }; const options = { suppressAuth: false }; return contacts.findOrCreateExtendedField(extendedFieldInfo, options) .then((extendedField) => { return extendedField; }) .catch((error) => { console.error(error); }); }); /* * Promise that resolves to: * * { * "extendedField": { * "_createdDate": "2021-01-19T23:18:16.550Z", * "_updatedDate": "2021-01-19T23:18:16.550Z" * "namespace": "custom", * "key": "custom.last-contacted", * "displayName": "Last Contacted", * "dataType": "DATE", * "fieldType": "USER_DEFINED", * }, * "newExtendedField": true * } */ ``` ## Find an extended field ```javascript import { Permissions, webMethod } from 'wix-web-module'; import { contacts } from 'wix-crm-backend'; export const myFindOrCreateExtendedFieldFunction = webMethod(Permissions.Anyone, () => { const extendedFieldInfo = { displayName: "Last Contacted", dataType: "DATE" }; const options = { suppressAuth: false }; return contacts.findOrCreateExtendedField(extendedFieldInfo, options) .then((extendedField) => { return extendedField; }) .catch((error) => { console.error(error); }); }); /* * Promise resolves to: * * { * "extendedField": { * "_createdDate": "2021-01-19T23:18:17Z", * "_updatedDate": "2021-01-19T23:18:17Z" * "namespace": "custom", * "key": "custom.last-contacted", * "displayName": "Last Contacted", * "dataType": "DATE", * "fieldType": "USER_DEFINED", * }, * "newExtendedField": false * } */ ``` ---