{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-apis/perfectgym/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["partial"]},"type":"markdown"},"seo":{"title":"Sport Alliance Developer Portal","description":"Portal for Partners","siteUrl":"https://developer.sportalliance.com","keywords":"sportalliance sport alliance fitness sports","lang":"en-US","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"__idx":0,"id":"working-with-customers-communication"},"children":["Working with customers communication"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"__idx":1,"id":"intro"},"children":["Intro"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use case description of how to use the customers communication collection to manage customer communication preferences and create communication messages via the Open API."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This collection supports two core scenarios:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Consent and preference management (read and update)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Outbound communication creation (existing or new communication thread)"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"__idx":2,"id":"relevant-endpoints"},"children":["Relevant Endpoints"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"../openapi/openapi/customers-communication/getCommunicationPreferences"},"children":["GET communication preferences"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"../openapi/openapi/customers-communication/updateCommunicationPreferences"},"children":["PUT update communication preferences"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"../openapi/openapi/customers-communication/createCommunicationInExistingCommunicationThread"},"children":["POST create communication in existing communication thread"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"../openapi/openapi/customers-communication/createCommunicationInNewCommunicationThread"},"children":["POST create communication in new communication thread"]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"__idx":3,"id":"customers-communication-in-our-platforms"},"children":["Customers communication in our platforms"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The customers communication collection is designed to help partners integrate communication flows while keeping consent handling aligned with studio-side settings."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Core behavior:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Communication preferences define whether and how communication can be sent."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Communication messages can be posted into existing threads or started as new threads."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Integrations should treat preferences as an authoritative constraint for outbound communication behavior."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Typical partner scenarios:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Preference center in member app or portal"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Marketing and service communication orchestration"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Customer support follow-ups linked to existing thread history"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"__idx":4,"id":"preferences-and-communication-flow"},"children":["Preferences and communication flow"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"__idx":5,"id":"1.-retrieve-communication-preferences"},"children":["1. Retrieve communication preferences"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use GET communication preferences before rendering communication settings or triggering campaigns."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use this to:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["show current channel/category choices"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["determine whether a channel is currently active"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["prefill preference settings in your UI"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"__idx":6,"id":"2.-update-communication-preferences"},"children":["2. Update communication preferences"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a customer changes consent or channel settings, call PUT update communication preferences."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Best practice:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["submit only intended changes"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["show explicit confirmation before save"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["refresh preferences after update"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"__idx":7,"id":"3.-create-communication-in-an-existing-thread"},"children":["3. Create communication in an existing thread"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If communication belongs to an already established context (for example support follow-up), use POST create communication in existing communication thread."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use this to:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["preserve conversation continuity"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["keep context attached to one thread lifecycle"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["avoid duplicate parallel threads for the same issue"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"__idx":8,"id":"4.-create-communication-in-a-new-thread"},"children":["4. Create communication in a new thread"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If no prior thread exists for the topic, use POST create communication in new communication thread."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use this to:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["start a new structured communication context"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["separate unrelated topics cleanly"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"__idx":9,"id":"complete-workflow-examples"},"children":["Complete workflow examples"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Note: Payloads below are illustrative integration examples. Validate exact field names and structures against the latest OpenAPI schema before publication or implementation."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"__idx":10,"id":"example-1-preference-center-update"},"children":["Example 1: Preference center update"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Scenario: Customer disables promotional SMS and keeps transactional email enabled."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["GET communication preferences"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Render settings UI"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["PUT update communication preferences"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Re-fetch GET communication preferences"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Example update payload (illustrative):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"preferences\": [\n    {\n      \"category\": \"MARKETING\",\n      \"channels\": [\n        { \"channel\": \"SMS\", \"active\": false },\n        { \"channel\": \"EMAIL\", \"active\": true }\n      ]\n    },\n    {\n      \"category\": \"SERVICE\",\n      \"channels\": [\n        { \"channel\": \"EMAIL\", \"active\": true }\n      ]\n    }\n  ],\n  \"requestId\": \"7e5dfce2-5475-4f23-b2d8-7718d5d19ce6\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"__idx":11,"id":"example-2-send-communication-in-existing-thread"},"children":["Example 2: Send communication in existing thread"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Scenario: Partner sends a follow-up message for an already open support conversation."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Resolve thread identifier from your context"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["POST create communication in existing communication thread"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Update timeline in UI"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Example payload (illustrative):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"threadId\": \"comm-thread-123\",\n  \"message\": {\n    \"subject\": \"Update on your request\",\n    \"body\": \"We have completed the requested change.\",\n    \"channel\": \"EMAIL\"\n  },\n  \"requestId\": \"765c6977-c91b-4a58-a1f0-5efe90ff84ca\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"__idx":12,"id":"example-3-create-new-thread-communication"},"children":["Example 3: Create new thread communication"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Scenario: Partner starts a new communication thread for a campaign confirmation."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["POST create communication in new communication thread"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Store returned thread reference"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Use existing-thread endpoint for follow-up messages"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Example payload (illustrative):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"topic\": \"Campaign registration\",\n  \"message\": {\n    \"subject\": \"Your registration was successful\",\n    \"body\": \"Thanks for registering. We will keep you updated.\",\n    \"channel\": \"EMAIL\"\n  },\n  \"requestId\": \"4f67db16-f75f-4cc8-9b95-75dc32b7f977\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"__idx":13,"id":"common-integration-challenges"},"children":["Common integration challenges"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Sending without preference check: Always read current communication preferences before outbound communication."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Channel/category mismatch: Keep your UI model aligned to category-channel structures returned by the API."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Missing refresh after update: Re-fetch preferences after PUT to avoid stale state."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Thread fragmentation: Reuse existing threads where possible instead of always creating new ones."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Weak auditability: Persist request IDs and thread IDs to support troubleshooting and compliance checks."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"__idx":14,"id":"webhook-and-event-considerations"},"children":["Webhook and event considerations"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For event-driven synchronization, use relevant webhook events from the event catalog and map them to your communication state model."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Event reference:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"../webhooks/event-types/"},"children":["Event types"]}]}]}]},"headings":[{"value":"Working with customers communication","id":"working-with-customers-communication","depth":1},{"value":"Intro","id":"intro","depth":2},{"value":"Relevant Endpoints","id":"relevant-endpoints","depth":2},{"value":"Customers communication in our platforms","id":"customers-communication-in-our-platforms","depth":2},{"value":"Preferences and communication flow","id":"preferences-and-communication-flow","depth":2},{"value":"1. Retrieve communication preferences","id":"1.-retrieve-communication-preferences","depth":3},{"value":"2. Update communication preferences","id":"2.-update-communication-preferences","depth":3},{"value":"3. Create communication in an existing thread","id":"3.-create-communication-in-an-existing-thread","depth":3},{"value":"4. Create communication in a new thread","id":"4.-create-communication-in-a-new-thread","depth":3},{"value":"Complete workflow examples","id":"complete-workflow-examples","depth":2},{"value":"Example 1: Preference center update","id":"example-1-preference-center-update","depth":3},{"value":"Example 2: Send communication in existing thread","id":"example-2-send-communication-in-existing-thread","depth":3},{"value":"Example 3: Create new thread communication","id":"example-3-create-new-thread-communication","depth":3},{"value":"Common integration challenges","id":"common-integration-challenges","depth":2},{"value":"Webhook and event considerations","id":"webhook-and-event-considerations","depth":2}],"frontmatter":{"seo":{"title":""}},"lastModified":"2026-03-20T08:05:35.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/apis/perfectgym/usecases/customers-communication-collection","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}