### Make API Request using cURL Source: https://developer.officernd.com/docs/making-your-first-api-request This example demonstrates how to make a GET request to retrieve members from an organization using cURL. Ensure you replace ':org-slug' with your organization's slug and 'd84b5bc0b31cf22c3f64159079cef79f4cb167a3' with your actual authentication token. ```bash curl --request GET \ --url https://app.officernd.com/api/v2/organizations/:org-slug/members \ --header 'accept: application/json' \ --header 'authorization: Bearer d84b5bc0b31cf22c3f64159079cef79f4cb167a3' ``` -------------------------------- ### API Response Example Source: https://developer.officernd.com/docs/making-your-first-api-request This is an example of a successful JSON response when retrieving members from an organization. It includes pagination details and a list of member objects. ```json { "rangeStart": 1, "rangeEnd": 1, "cursorNext": "string", "cursorPrev": "string", "results": [ { "_id": "664c6947e59b00c0bb1a2ad9", "name": "John Doe", "email": "john@doe.com", "location": "664c6947e59b0050731a2aca", "company": "664c6947e59b0031c71a2ad1", "status": "contact", "createdAt": "2024-05-21T09:28:39.360Z", "modifiedAt": "2025-03-25T09:34:07.936Z", "properties": { "hubspot_link_id": "49511990-108680244395" } } ] } ``` -------------------------------- ### Example Gateway URL with Placeholders Source: https://developer.officernd.com/docs/hosted-payment-gateway This is an example of a Gateway URL that includes placeholders for dynamic parameters. These placeholders will be populated by OfficeRnD when initiating a customer redirect request. ```text https://pay.cool-payments.com/hosted?amount={{ amount }}&ref={{ reference }}&tId={{ transactionId }}&signature={{ signature }}&redirectUrl={{ redirectUrl }} ``` -------------------------------- ### Payload Examples for Signature Verification Source: https://developer.officernd.com/docs/how-to-list-a-partner-integration-in-officernd These examples illustrate the format of payloads used for generating hash signatures, showing variations for multi-location and all-locations integrations. ```text '{"slug":"test-slug","locations":"location-id1, location-id2"}.1648190384' - multi-location integration ``` ```text '{"slug":"test-slug","locations":""}.1648190384' - all locations integration ``` -------------------------------- ### v1 $populate Example Source: https://developer.officernd.com/docs/api-v2-migration-guide In API v1, the $populate parameter could be used to embed related resource data directly into the response. This example shows how to request member data along with their associated team information. ```http GET /api/v1/organizations/{orgSlug}/members?$populate=team ``` -------------------------------- ### HMAC-SHA256 Response Message Example Source: https://developer.officernd.com/docs/hosted-payment-gateway This example demonstrates the construction of the message string for signing responses using HMAC-SHA256. Key parameters for the response are concatenated with a pipe symbol. ```text success|6f47c19b-eb9d-4ee5-a144-19f7b9263183 ``` -------------------------------- ### File Custom Property Example Source: https://developer.officernd.com/docs/how-to-store-custom-data-in-officernd Provides the API notation for a file custom property. The value is a URL string that requires authentication. ```json "CustomFileProperty": "download/org-id/attachments/attachment-id" ``` -------------------------------- ### Multi-Select Custom Property Example Source: https://developer.officernd.com/docs/how-to-store-custom-data-in-officernd Shows the API notation for a multi-select custom property. The value is an array of strings. ```json ["firstValue","secondValue","thirdValue"] ``` -------------------------------- ### HMAC-SHA256 Request Signature Example Source: https://developer.officernd.com/docs/hosted-payment-gateway This example provides the hex-encoded signature for a given request message, calculated using HMAC-SHA256 with a specific secret key. ```text 617b0b7d29e57db460208904f0e64c11092872d86faf581598c3ba9b8b0e00ae ``` -------------------------------- ### HMAC-SHA256 Request Message Example Source: https://developer.officernd.com/docs/hosted-payment-gateway This example shows how to construct the message string for signing requests using HMAC-SHA256. The message is formed by concatenating key parameters with a pipe symbol. ```text 12.34|INV-001|6f47c19b-eb9d-4ee5-a144-19f7b9263183 ``` -------------------------------- ### HMAC-SHA256 Response Signature Example Source: https://developer.officernd.com/docs/hosted-payment-gateway This example shows the hex-encoded signature for a given response message, generated using HMAC-SHA256 with a specific secret key. ```text 2c6d0e09f76011cebf9073a4fa08d752e5c5c440e750c6ee1f8ad5d5cce70bad ``` -------------------------------- ### String Custom Property Example Source: https://developer.officernd.com/docs/how-to-store-custom-data-in-officernd Demonstrates the API notation for a string custom property. Ensure the value is enclosed in double quotes. ```json "CustomStringProperty": "stringValue" ``` -------------------------------- ### Text Custom Property Example Source: https://developer.officernd.com/docs/how-to-store-custom-data-in-officernd Shows the API notation for a text custom property. Values should be enclosed in double quotes. ```json "CustomTextProperty": "textValue" ``` -------------------------------- ### Number Custom Property Example Source: https://developer.officernd.com/docs/how-to-store-custom-data-in-officernd Illustrates the API notation for a number custom property. Values should not be enclosed in quotes. ```json "CustomNumberProperty": 123456 ``` -------------------------------- ### Fetching Member Data in API v2 Source: https://developer.officernd.com/docs/api-v2-migration-guide This example shows the structure of a member resource response in API v2, where related data like 'company' is represented by an ID, not a fully populated object. ```json { "_id": 123, "company": 456, // other order fields } ``` -------------------------------- ### Get Members Created After a Specific Date Source: https://developer.officernd.com/docs/api-v2-migration-guide Retrieve all members created after a given date using the $gt operator. This is a basic example of filtering by a single date condition. ```curl GET /api/v2/organizations/{orgSlug}/members?createdAt[$gt]=2024-01-01T00:00:00.000Z ``` -------------------------------- ### Fetch First Page of Invoices Source: https://developer.officernd.com/docs/building-queries To retrieve the initial set of results, make a GET request to the relevant endpoint without any cursor parameters. The `$limit` parameter is optional and defaults to 50. ```curl > GET /api/v2/invoices?$limit=50 ``` -------------------------------- ### Boolean Custom Property Example Source: https://developer.officernd.com/docs/how-to-store-custom-data-in-officernd Demonstrates the API notation for a boolean custom property. Values should be true or false without quotes. ```json "CustomStringProperty": true ``` -------------------------------- ### Fetch First Page of Invoices (v2 API) Source: https://developer.officernd.com/docs/api-v2-migration-guide Make a GET request to the v2 invoices endpoint without any cursor parameters to retrieve the first page of results. Optionally specify a $limit, up to 50. ```curl GET /api/v2/organizations/{orgSlug}/invoices?$limit=50 ``` -------------------------------- ### Date Custom Property Example Source: https://developer.officernd.com/docs/how-to-store-custom-data-in-officernd Shows the API notation for a date custom property. Dates must be in ISO format (YYYY-MM-DDTHH:mm:ss.sssZ) and enclosed in quotes. ```json "CustomDateProperty": "2022-01-01T00:00:00.000Z" ``` -------------------------------- ### Fetch Next Page of Invoices Source: https://developer.officernd.com/docs/building-queries To fetch subsequent pages, include the `cursorNext` token obtained from the previous response in your GET request. This ensures you retrieve the next set of results. ```curl > GET /api/v2/invoices?$limit=50&$cursorNext=abc123... ``` -------------------------------- ### Get Members by Creation Date and Status Source: https://developer.officernd.com/docs/building-queries Use this endpoint to retrieve members created after a specific date and with certain statuses. Ensure to use indexed fields and supported operators for optimal performance. ```curl GET /api/v2/organizations/{orgSlug}/members?status[$in]=active,contact&createdAt[$gte]=2024-01-01T00:00:00.000Z ``` -------------------------------- ### Update Member Custom Properties Source: https://developer.officernd.com/docs/how-to-store-custom-data-in-officernd Example of a PUT request to update multiple custom properties for a member. The 'properties' object contains key-value pairs for the custom properties. ```json { "properties": { "CustomProperty1": "test1", "CustomProperty2": "test2", "CustomProperty3": "test3", "CustomProperty4": "test4" } } ``` -------------------------------- ### Fetch Next Page of Invoices (v2 API) Source: https://developer.officernd.com/docs/api-v2-migration-guide To retrieve the subsequent page of invoices, use the cursorNext token obtained from the previous response in your GET request. This ensures you fetch the next set of results without duplication. ```curl > GET /api/v2/organizations/{orgSlug}/invoices?$limit=50&$cursorNext=abc123... ``` -------------------------------- ### Member Removed Webhook Payload Source: https://developer.officernd.com/docs/webhooks-getting-started Example JSON payload for the 'member.removed' event. This payload includes information about the removed member, such as their status, team, and office. ```json { "event": "5f8715ca1e74e400d4164ea6", "eventType": "member.removed", "data": { "object": { "_id": "5e8c9df14d46c7001064c3ef", "status": "active", "calculatedStatus": "drop-in", "team": "5e8c9eb94d46c7001064c427", "office": "5e1d8bd37f8759001051b0e2", "name": "Jonathan Brown", "description": "", "image": null, "organization": "5e1d8bd37f8759001051b0ca", "email": "ingadget@ecorp.com" } }, "createdAt": "2020-10-14T15:14:18.042Z" } ``` -------------------------------- ### Company Payment Details Removed Webhook Payload Source: https://developer.officernd.com/docs/webhooks-getting-started Example JSON payload for the 'company.paymentdetails.removed' event. This payload contains details about the removed payment information and the associated company. ```json { "event": "5f8d6c9747120500116899e4", "eventType": "company.paymentdetails.removed", "data": { "object": { "_id": "5f86de9c1e74e400d416467c", "card": { "id": "card_", "name": "E Corp.", "brand": "Visa", "funding": "credit", "exp_month": 11, "exp_year": 2022, "country": "US", "cvc_check": "pass", "last4": "1111" }, "provider": "stripe", "providerId": "", "sourceId": "card_", "authorization": { "authProviderId": "seti_", "status": "not_required" }, "createdAt": "2020-10-14T11:18:52.130Z", "createdBy": "5e131db18edb280010c8d4ef" }, "company": "5e1d8bd37f8759001051b0e8" }, "createdAt": "2020-10-19T10:38:15.127Z" } ``` -------------------------------- ### GET /api/v2/organizations/{orgSlug}/members Source: https://developer.officernd.com/docs/building-queries Retrieves members filtered by status and creation date. Supports filtering by status (active or contact) and members created after a specific date. ```APIDOC ## GET /api/v2/organizations/{orgSlug}/members ### Description Retrieves members that are either 'active' or 'contact' and were created after January 1, 2024. This endpoint is designed for performance by utilizing database indexes. ### Method GET ### Endpoint /api/v2/organizations/{orgSlug}/members ### Parameters #### Path Parameters - **orgSlug** (string) - Required - The unique slug of the organization. #### Query Parameters - **status[$in]** (string) - Required - Filters members by status. Accepts a comma-separated list of statuses (e.g., "active,contact"). - **createdAt[$gte]** (string) - Required - Filters members created on or after the specified ISO 8601 date-time string (e.g., "2024-01-01T00:00:00.000Z"). ### Request Example ```json { "example": "GET /api/v2/organizations/myorg/members?status[$in]=active,contact&createdAt[$gte]=2024-01-01T00:00:00.000Z" } ``` ### Response #### Success Response (200) - **members** (array) - A list of member objects matching the query criteria. - **member** (object) - Represents a single member with their details. - **id** (string) - The unique identifier of the member. - **name** (string) - The name of the member. - **status** (string) - The current status of the member. - **createdAt** (string) - The ISO 8601 timestamp when the member was created. #### Response Example ```json { "example": "{\"members\": [{\"id\": \"member123\", \"name\": \"John Doe\", \"status\": \"active\", \"createdAt\": \"2024-02-15T10:00:00.000Z\"}] }" } ``` ``` -------------------------------- ### OfficeRnD Return URL for Integration Source: https://developer.officernd.com/docs/how-to-list-a-partner-integration-in-officernd This is the standard return URL provided by OfficeRnD for external integrations after the connection process is completed. ```text https://app.officernd.com/connect/external-integration/return ``` -------------------------------- ### Handle Webhook Events with Express.js Source: https://developer.officernd.com/docs/webhooks-getting-started Set up an Express.js server to receive and process incoming webhook events. Ensure the body-parser middleware is configured to handle raw JSON payloads. ```javascript const app = require('express')(); const bodyParser = require('body-parser'); app.use(bodyParser.raw({ type: 'application/json' })); app.post('/webhooks/callback', (req, res) => { const { body, rawBody, headers } = req; const { eventType, data } = body; switch (eventType) { case 'company.paymentdetails.removed': // Handle company payment details removal break; case 'member.paymentdetails.removed': // Handle member payment details removal break; case 'member.removed': case 'company.removed': // Handle member or company removal break; default: // Unhandled event console.log(`Event ${eventType} was not handled.`); } }); app.listen(3000, () => console.log('Listening on 3000')); ``` -------------------------------- ### Generate Access Token using OAuth 2.0 Source: https://developer.officernd.com/docs/how-to-list-a-partner-integration-in-officernd Use this cURL command to generate an access token by exchanging an authorization code. Ensure to replace placeholders with your actual credentials and redirect URI. Access tokens are valid for 1 hour, and refresh tokens for 15 days. ```curl curl --location --request POST 'https://identity.officernd.com/oauth/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'client_id=client_id' \ --data-urlencode 'client_secret=client_secret' \ --data-urlencode 'code=code' \ --data-urlencode 'grant_type=authorization_code' \ --data-urlencode 'redirect_uri=https://url.com/connect/return' \ --data-urlencode 'scope=flex.community.members.read flex.community.members.create flex.billing.payments.read flex.community.billing.payments.create' ``` -------------------------------- ### cURL Request for Token Generation Source: https://developer.officernd.com/docs/authentication Use this cURL command to generate an OAuth 2.0 token. Ensure you replace placeholders with your actual client ID, client secret, and desired scope. CORS is disabled, so this request should be made from a server. ```bash curl -X POST \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "client_id={client_id}&client_secret={client_secret}&grant_type=client_credentials&scope=flex.community.members.read" \ https://identity.officernd.com/oauth/token ``` -------------------------------- ### Authorization Header Format Source: https://developer.officernd.com/docs/authentication How to format the Authorization header when using the generated access token for API requests. ```curl Authorization: Bearer ``` -------------------------------- ### Response Format with Pagination Metadata Source: https://developer.officernd.com/docs/api-v2-migration-guide This JSON structure shows the typical response format for list endpoints, including the results array and pagination metadata like cursorNext, cursorPrev, rangeStart, and rangeEnd. ```json { "results": [ … list of 50 transaction objects … ], "cursorNext": "eyJpZCI6IjUwIiwgIm9mZnNldCI6IjUwIn0=", "cursorPrev": null, "rangeEnd": 50, "rangeStart": 1 } ``` -------------------------------- ### POST /oauth/token Source: https://developer.officernd.com/docs/authentication Generates an OAuth 2.0 access token. This endpoint requires your Client ID, Client Secret, grant type, and desired scope. ```APIDOC ## POST /oauth/token ### Description Generates an OAuth 2.0 access token required for authenticating with the OfficeRND API. This token is generated using your application's credentials. ### Method POST ### Endpoint https://identity.officernd.com/oauth/token ### Parameters #### Request Body Parameters - **client_id** (string) - Required - The Client ID obtained from your OfficeRND application. - **client_secret** (string) - Required - The Client Secret obtained from your OfficeRND application. - **grant_type** (string) - Required - Must be set to "client_credentials". - **scope** (string) - Required - Defines the permissions the token will have. For example: `flex.community.members.read`. ### Request Example ```bash curl -X POST \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "client_id={client_id}&client_secret={client_secret}&grant_type=client_credentials&scope=flex.community.members.read" \ https://identity.officernd.com/oauth/token ``` ### Response #### Success Response (200) - **access_token** (string) - The generated access token. - **token_type** (string) - The type of token, typically "Bearer". - **expires_in** (integer) - The time in seconds until the token expires. - **scope** (string) - The scope of permissions granted by the token. #### Response Example ```json { "access_token": "{access_token}", "token_type": "Bearer", "expires_in": 3599, "scope": "flex.community.members.read" } ``` ### Using the Authorization Header Include the generated token in the `Authorization` header of your API requests: ``` Authorization: Bearer ``` ``` -------------------------------- ### Requesting OAuth 2.0 Token with Scopes (Client Credentials Flow) Source: https://developer.officernd.com/docs/api-v2-migration-guide Use this cURL command to request an access token from the authorization server. Specify the desired scopes using the 'scope' parameter, which can be space-separated or URL-encoded. Ensure you replace placeholders with your actual client ID, secret, and desired scopes. ```curl POST https://identity.officernd.com/oauth/token Content-Type: application/x-www-form-urlencoded grant_type=client_credentials& client_id=& client_secret=& scope=flex.billing.payments.read%20flex.billing.payments.create ``` -------------------------------- ### Token Generation Endpoint Source: https://developer.officernd.com/docs/authentication The URL for generating an OAuth 2.0 token. ```text https://identity.officernd.com/oauth/token ``` -------------------------------- ### Create Entity with Custom Properties Source: https://developer.officernd.com/docs/how-to-store-custom-data-in-officernd You can set custom properties for an entity during its creation by including the 'properties' object in the POST request body. ```APIDOC ## POST /api/v2/organizations/org-slug/[entity-type] ### Description Creates a new entity (e.g., member, company) and allows setting custom properties during creation. ### Method POST ### Endpoint `https://app.officernd.com/api/v2/organizations/org-slug/[entity-type]` ### Parameters #### Path Parameters - **org-slug** (string) - Required - The slug of the organization. - **entity-type** (string) - Required - The type of entity to create (e.g., 'members', 'companies'). #### Request Body - **properties** (object) - Optional - An object containing the custom properties to set for the new entity. - **CustomProperty1** (string | number | boolean | array | object) - Optional - The value of the custom property. The type and format depend on the custom property's configuration. - Other entity-specific fields as required. ### Request Example ```json { "name": "New Entity Name", "email": "new.entity@example.com", "properties": { "CustomProperty1": "initialValue1", "CustomProperty2": 123 } } ``` ### Response #### Success Response (201) - **id** (string) - The ID of the newly created entity. - **properties** (object) - An object containing the custom properties set for the new entity. - Other entity-specific fields. #### Response Example ```json { "id": "new-entity-id", "name": "New Entity Name", "email": "new.entity@example.com", "properties": { "CustomProperty1": "initialValue1", "CustomProperty2": 123 } } ``` ``` -------------------------------- ### Process Payment Source: https://developer.officernd.com/docs/hosted-payment-gateway This endpoint processes a payment charge. ```APIDOC ## POST /websites/developer_officernd ### Description This endpoint processes a payment charge with the provided details. ### Method POST ### Endpoint /websites/developer_officernd ### Parameters #### Request Body - **amount** (number) - Required - The amount that needs to be charged. - **reference** (string) - Required - A reference string that clarifies what the charge is for (i.e. INV-001). - **transactionId** (string) - Required - A unique identifier that references the transaction. - **signature** (string) - Required - A signature generated from the amount, reference and transactionId. - **redirectUrl** (string) - Required - A url to redirect back when charge is processed or canceled. ### Response #### Success Response (200) - **status** (string) - The status of the transaction - values should be either `success` or `fail`. - **transactionId** (string) - The unique identifier that was passed in the initial request. - **signature** (string) - A signature generated from the status and transactionId. #### Error Response (400 or other) - **status** (string) - The status of the transaction - values should be either `success` or `fail`. - **transactionId** (string) - The unique identifier that was passed in the initial request. - **signature** (string) - A signature generated from the status and transactionId. - **error** (string) - An error message with more details about the reason of the failure. ``` -------------------------------- ### Successful Connection Response Source: https://developer.officernd.com/docs/how-to-list-a-partner-integration-in-officernd This JSON structure indicates a successful connection response from the integration's healthcheck URL. ```json { "accountName": "_J&J Ltd" } ``` -------------------------------- ### Filter members created after a specific date and with active status Source: https://developer.officernd.com/docs/building-queries Use the 'createdAt' field with the '$gte' operator for date filtering and specify 'status=active' for status filtering. This query retrieves members created after January 1st, 2025, and whose status is 'active'. ```curl GET /api/v2/organizations/{orgSlug}/members?createdAt[$gte]=2025-01-01T00:00:00.000Z&status=active ``` -------------------------------- ### Filter members created after a specific date Source: https://developer.officernd.com/docs/building-queries Use the 'createdAt' field with the '$gte' operator to retrieve members created on or after the specified date. This query fetches all members created after January 1st, 2024. ```curl GET /api/v2/organizations/{orgSlug}/members?createdAt[$gte]=2024-01-01T00:00:00.000Z ``` -------------------------------- ### JSON Response Format with Pagination Metadata Source: https://developer.officernd.com/docs/building-queries This JSON structure illustrates the pagination metadata returned by the API, including the list of results and cursor tokens for navigating through pages. ```json { "results": [ … list of 50 transaction objects … ], "cursorNext": "eyJpZCI6IjUwIiwgIm9mZnNldCI6IjUwIn0=", "cursorPrev": null, "rangeEnd": 50, "rangeStart": 1 } ``` -------------------------------- ### Filter members within a date range Source: https://developer.officernd.com/docs/building-queries Combine '$gte' and '$lt' operators on the 'createdAt' field to define a date range. This query fetches members created on or after January 1st, 2025, and before February 1st, 2025. ```curl GET /api/v2/organizations/{orgSlug}/members?createdAt[$gte]=2025-01-01T00:00:00.000Z&createdAt[$lt]=2025-02-01T00:00:00.000Z ``` -------------------------------- ### Token Response Structure Source: https://developer.officernd.com/docs/authentication The structure of the JSON response received after a successful token generation request. ```json { "access_token": "", "token_type": "Bearer", "expires_in": 3599, "scope": "flex.community.members.read" } ``` -------------------------------- ### Signature Format for Payload Verification Source: https://developer.officernd.com/docs/how-to-list-a-partner-integration-in-officernd This shows the expected format for the signature used to verify payloads from OfficeRnD, including the timestamp and the signature hash. ```text t=1602237976,signature=099618786b221c0bd88346a71e01c8deec60007c2db2ead5975284d4e957b8f5 ``` -------------------------------- ### Unsuccessful Connection Response Source: https://developer.officernd.com/docs/how-to-list-a-partner-integration-in-officernd This JSON structure indicates an unsuccessful connection response from the integration's healthcheck URL, providing an error message. ```json { "message": "Error description" } ``` -------------------------------- ### Update Single Member Custom Property Source: https://developer.officernd.com/docs/how-to-store-custom-data-in-officernd Demonstrates updating only a single custom property for a member. This is achieved by including only the desired property within the 'properties' object in the PUT request body. ```json { "properties": { "CustomProperty1": "test1" } } ``` -------------------------------- ### Retrieve Integration Secret Source: https://developer.officernd.com/docs/how-to-list-a-partner-integration-in-officernd This cURL command retrieves the integration secret using the organization slug and integration ID. Note that this client secret is distinct from the one used in Developer Tools. ```curl curl --location --request GET 'https://app.officernd.com/api/v2/organizations/{{org-slug}}/integrations/{{integrationId}}' ``` -------------------------------- ### Including Access Token in API Request Header Source: https://developer.officernd.com/docs/api-v2-migration-guide When making requests to API v2 endpoints, include the obtained access token in the 'Authorization' header. The token should be prefixed with 'Bearer '. ```http Authorization: Bearer ``` -------------------------------- ### Filter members by multiple status values using $in Source: https://developer.officernd.com/docs/building-queries Use the '$in' operator with a comma-separated list to filter for members whose status is either 'active' or 'contact'. This query returns members matching any of the specified statuses. ```curl GET /api/v2/organizations/{orgSlug}/members?status[$in]=active,contact ``` -------------------------------- ### Update Custom Property for a Member Source: https://developer.officernd.com/docs/how-to-store-custom-data-in-officernd This endpoint allows you to update custom properties for a specific member. You can update all properties at once or a single property. ```APIDOC ## PUT /api/v2/organizations/org-slug/members/:member-id ### Description Updates custom properties for a specific member. This endpoint can be used to update all properties or a single property within the 'properties' object. ### Method PUT ### Endpoint `https://app.officernd.com/api/v2/organizations/org-slug/members/:member-id` ### Parameters #### Path Parameters - **org-slug** (string) - Required - The slug of the organization. - **member-id** (string) - Required - The ID of the member to update. #### Request Body - **properties** (object) - Required - An object containing the custom properties to update. - **CustomProperty1** (string | number | boolean | array | object) - Optional - The value of the custom property. The type and format depend on the custom property's configuration. - **CustomProperty2** (string | number | boolean | array | object) - Optional - The value of the custom property. ### Request Example ```json { "properties": { "CustomProperty1": "test1", "CustomProperty2": "test2", "CustomProperty3": "test3", "CustomProperty4": "test4" } } ``` ### Response #### Success Response (200) - **properties** (object) - An object containing the updated custom properties for the member. #### Response Example ```json { "id": "member-id", "name": "John Doe", "email": "john.doe@example.com", "properties": { "CustomProperty1": "test1", "CustomProperty2": "test2", "CustomProperty3": "test3", "CustomProperty4": "test4" } } ``` ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.