# Custom Fields ## Add Key `client.v1.customFields.addKey(CustomFieldAddKeyParamsbody, RequestOptionsoptions?): void` **post** `/v1/customFields/addKey` Add a key to the allow list for a given entity. There is a 100 character limit on custom field keys. ### Parameters - **body:** `CustomFieldAddKeyParams` - **enforce\_uniqueness:** `boolean` - **entity:** `"alert" | "billable_metric" | "charge" | 15 more` - `"alert"` - `"billable_metric"` - `"charge"` - `"commit"` - `"contract_credit"` - `"contract_product"` - `"contract"` - `"credit_grant"` - `"customer_plan"` - `"customer"` - `"discount"` - `"invoice"` - `"plan"` - `"professional_service"` - `"product"` - `"rate_card"` - `"scheduled_charge"` - `"subscription"` - **key:** `string` ### Example ```node import Metronome from '@metronome/sdk'; const client = new Metronome({ bearerToken: 'My Bearer Token', }); await client.v1.customFields.addKey({ enforce_uniqueness: true, entity: 'customer', key: 'x_account_id' }); ``` ## Delete Values `client.v1.customFields.deleteValues(CustomFieldDeleteValuesParamsbody, RequestOptionsoptions?): void` **post** `/v1/customFields/deleteValues` Deletes one or more custom fields on an instance of a Metronome entity. ### Parameters - **body:** `CustomFieldDeleteValuesParams` - **entity:** `"alert" | "billable_metric" | "charge" | 15 more` - `"alert"` - `"billable_metric"` - `"charge"` - `"commit"` - `"contract_credit"` - `"contract_product"` - `"contract"` - `"credit_grant"` - `"customer_plan"` - `"customer"` - `"discount"` - `"invoice"` - `"plan"` - `"professional_service"` - `"product"` - `"rate_card"` - `"scheduled_charge"` - `"subscription"` - **entity\_id:** `string` - **keys:** `Array` ### Example ```node import Metronome from '@metronome/sdk'; const client = new Metronome({ bearerToken: 'My Bearer Token', }); await client.v1.customFields.deleteValues({ entity: 'customer', entity_id: '99594816-e8a5-4bca-be21-8d1de0f45120', keys: ['x_account_id'], }); ``` ## List Keys `client.v1.customFields.listKeys(CustomFieldListKeysParamsparams?, RequestOptionsoptions?): CustomFieldListKeysResponse` **post** `/v1/customFields/listKeys` List all active custom field keys, optionally filtered by entity type. ### Parameters - **params:** `CustomFieldListKeysParams` - **next\_page:** `string` Query param: Cursor that indicates where the next page of results should start. - **entities:** `Array<"alert" | "billable_metric" | "charge" | 15 more>` Body param: Optional list of entity types to return keys for - `"alert"` - `"billable_metric"` - `"charge"` - `"commit"` - `"contract_credit"` - `"contract_product"` - `"contract"` - `"credit_grant"` - `"customer_plan"` - `"customer"` - `"discount"` - `"invoice"` - `"plan"` - `"professional_service"` - `"product"` - `"rate_card"` - `"scheduled_charge"` - `"subscription"` ### Returns - `CustomFieldListKeysResponse` - **data:** `Array` - **enforce\_uniqueness:** `boolean` - **entity:** `"alert" | "billable_metric" | "charge" | 15 more` - `"alert"` - `"billable_metric"` - `"charge"` - `"commit"` - `"contract_credit"` - `"contract_product"` - `"contract"` - `"credit_grant"` - `"customer_plan"` - `"customer"` - `"discount"` - `"invoice"` - `"plan"` - `"professional_service"` - `"product"` - `"rate_card"` - `"scheduled_charge"` - `"subscription"` - **key:** `string` - **next\_page:** `string | null` ### Example ```node import Metronome from '@metronome/sdk'; const client = new Metronome({ bearerToken: 'My Bearer Token', }); const response = await client.v1.customFields.listKeys({ entities: ['customer'] }); console.log(response.data); ``` ## Remove Key `client.v1.customFields.removeKey(CustomFieldRemoveKeyParamsbody, RequestOptionsoptions?): void` **post** `/v1/customFields/removeKey` Remove a key from the allow list for a given entity. ### Parameters - **body:** `CustomFieldRemoveKeyParams` - **entity:** `"alert" | "billable_metric" | "charge" | 15 more` - `"alert"` - `"billable_metric"` - `"charge"` - `"commit"` - `"contract_credit"` - `"contract_product"` - `"contract"` - `"credit_grant"` - `"customer_plan"` - `"customer"` - `"discount"` - `"invoice"` - `"plan"` - `"professional_service"` - `"product"` - `"rate_card"` - `"scheduled_charge"` - `"subscription"` - **key:** `string` ### Example ```node import Metronome from '@metronome/sdk'; const client = new Metronome({ bearerToken: 'My Bearer Token', }); await client.v1.customFields.removeKey({ entity: 'customer', key: 'x_account_id' }); ``` ## Set Values `client.v1.customFields.setValues(CustomFieldSetValuesParamsbody, RequestOptionsoptions?): void` **post** `/v1/customFields/setValues` Sets one or more custom fields on an instance of a Metronome entity. If a key/value pair passed in this request matches one already set on the entity, its value will be overwritten. Any key/value pairs that exist on the entity that do not match those passed in this request will remain untouched. This endpoint is transactional and will update all key/value pairs or no key/value pairs. Partial updates are not supported. There is a 200 character limit on custom field values. ### Parameters - **body:** `CustomFieldSetValuesParams` - **custom\_fields:** `Record` - **entity:** `"alert" | "billable_metric" | "charge" | 15 more` - `"alert"` - `"billable_metric"` - `"charge"` - `"commit"` - `"contract_credit"` - `"contract_product"` - `"contract"` - `"credit_grant"` - `"customer_plan"` - `"customer"` - `"discount"` - `"invoice"` - `"plan"` - `"professional_service"` - `"product"` - `"rate_card"` - `"scheduled_charge"` - `"subscription"` - **entity\_id:** `string` ### Example ```node import Metronome from '@metronome/sdk'; const client = new Metronome({ bearerToken: 'My Bearer Token', }); await client.v1.customFields.setValues({ custom_fields: { x_account_id: 'KyVnHhSBWl7eY2bl' }, entity: 'customer', entity_id: '99594816-e8a5-4bca-be21-8d1de0f45120', }); ```