# TrueLoyal > TrueLoyal offers two REST APIs, one for loyalty and one for advocacy. ## Guides - [Introduction](/guides/introduction.html): TrueLoyal offers two REST APIs, one for loyalty and one for advocacy. - [Authentication](/loyalty/guides/authentication.html): Create API keys and authenticate requests to the Admin, UI and Guest APIs. - [Rate Limits](/loyalty/guides/rate-limits.html): How many Loyalty API requests you can make per minute, and what happens when you make more. - [Status Codes](/loyalty/guides/status-codes.html): The HTTP status codes and error codes returned by the Loyalty API. - [Receiving Webhooks](/loyalty/guides/receiving-webhooks.html): Get notified when something happens in your loyalty program, such as points being earned or a member enrolling. - [Webhook Event Signatures](/loyalty/guides/webhook-signatures.html): Verify that webhook requests come from TrueLoyal. - [Authentication](/advocacy/guides/authentication.html): Create an OAuth application and get an access token. - [Important Notes](/advocacy/guides/important-notes.html): Requirements every request must meet. - [Versioning](/advocacy/guides/versioning.html): Choose which version of the Advocacy API your requests use. - [Inclusion of Related Resources](/advocacy/guides/related-resources.html): Include related resources in a response instead of making extra requests. - [Sparse Fieldsets](/advocacy/guides/sparse-fieldsets.html): Return only the fields you need for each resource type. - [Pagination](/advocacy/guides/pagination.html): Page through collections with pagination links. - [Sorting](/advocacy/guides/sorting.html): Sort collections by one or more fields. - [Changes to Sensitive Data](/advocacy/guides/sensitive-data.html): Confirm the user's identity before changing their email, password or authentication factors. - [Receiving Webhooks](/advocacy/guides/receiving-webhooks.html): How we deliver events to your endpoint, retry failures, and what we expect back. - [Webhook Event Signatures](/advocacy/guides/webhook-signatures.html): Verify that webhook requests come from TrueLoyal and were not tampered with. - [Connecting AI Assistants (Beta)](/advocacy/guides/mcp.html): Search, analyze and manage your posts, assets and loyalty programs from Claude and other AI assistants. ## Loyalty API Reference - [TrueLoyal Loyalty API](/loyalty-api.html): The reference for every endpoint of the TrueLoyal Loyalty API, which is made up of the Admin, UI and Guest APIs. See the [Loyalty API guides](loyalty/guides/authentication.html) to create API keys and authenticate, and for rate limits and status codes. - [List Members](/loyalty-api.html#operation-loyalty-members-get): GET /loyalty/members - [Create a Loyalty Member](/loyalty-api.html#operation-loyalty-members-post): POST /loyalty/members - [Retrieve a Loyalty Member with Member ID](/loyalty-api.html#operation-loyalty-members-member-id-get): GET /loyalty/members/{member_id} - [Update a Loyalty Member with Member ID](/loyalty-api.html#operation-loyalty-members-member-id-post): POST /loyalty/members/{member_id} - [Delete a Loyalty Member with Member ID](/loyalty-api.html#operation-loyalty-members-member-id-delete): DELETE /loyalty/members/{member_id} - [Retrieve a Loyalty Member with TrueLoyal-generated ID](/loyalty-api.html#operation-loyalty-members-id-get): GET /loyalty/members/{id} - [Update a Loyalty Member with TrueLoyal-generated ID](/loyalty-api.html#operation-loyalty-members-id-post): POST /loyalty/members/{id} - [Delete a Loyalty Member with TrueLoyal-generated ID](/loyalty-api.html#operation-loyalty-members-id-delete): DELETE /loyalty/members/{id} - [List all activities](/loyalty-api.html#operation-loyalty-activities-get): GET /loyalty/activities - [List all the Eligible Activities for a Member using Member ID](/loyalty-api.html#operation-loyalty-members-member-id-activities-get): GET /loyalty/members/{member_id}/activities - [List all the Eligible Activities for a Member using TrueLoyal-generated Member ID](/loyalty-api.html#operation-loyalty-members-id-activities-get): GET /loyalty/members/{id}/activities - [Retrieve an Activity using Activity ID](/loyalty-api.html#operation-loyalty-activities-activity-id-get): GET /loyalty/activities/{activity_id} - [Retrieve an Activity using TrueLoyal-generated ID](/loyalty-api.html#operation-loyalty-activities-id-get): GET /loyalty/activities/{id} - [Retrieve Custom Attribute for an Activity using Activity ID](/loyalty-api.html#operation-loyalty-activities-activity-id-attributes-get): GET /loyalty/activities/{activity_id}/attributes - [Retrieve Custom Attribute for an Activity using TrueLoyal-generated ID](/loyalty-api.html#operation-loyalty-activities-id-attributes-get): GET /loyalty/activities/{id}/attributes - [List All Rewards](/loyalty-api.html#operation-loyalty-rewards-get): GET /loyalty/rewards - [Get Eligible Rewards with Member ID](/loyalty-api.html#operation-loyalty-members-member-id-rewards-get): GET /loyalty/members/{member_id}/rewards - [Get Eligible Rewards with TrueLoyal-generated Member ID](/loyalty-api.html#operation-loyalty-members-id-rewards-get): GET /loyalty/members/{id}/rewards - [Award Points](/loyalty-api.html#operation-loyalty-transactions-award-post): POST /loyalty/transactions/award - [Redeem Points](/loyalty-api.html#operation-loyalty-transactions-redeem-post): POST /loyalty/transactions/redeem - [Return Points](/loyalty-api.html#operation-loyalty-transactions-return-post): POST /loyalty/transactions/return - [Deduct Points](/loyalty-api.html#operation-loyalty-transactions-deduct-post): POST /loyalty/transactions/deduct - [Reverse Points with Transaction ID](/loyalty-api.html#operation-loyalty-transactions-id-reverse-post): POST /loyalty/transactions/{id}/reverse - [Reverse Points using Unique Transaction Attribute](/loyalty-api.html#operation-loyalty-transactions-unique-transaction-attribute-reverse-post): POST /loyalty/transactions/{unique_transaction_attribute}/reverse - [Retrieve a Transaction with Transaction ID](/loyalty-api.html#operation-loyalty-transactions-id-get): GET /loyalty/transactions/{id} - [Modify a pending Award Transaction with Transaction ID](/loyalty-api.html#operation-loyalty-transactions-id-post): POST /loyalty/transactions/{id} - [Retrieve a transaction with Order ID](/loyalty-api.html#operation-loyalty-transactions-order-id-get): GET /loyalty/transactions/{order_id} - [Retrieve a Transaction using Unique Transaction Attribute](/loyalty-api.html#operation-loyalty-transactions-unique-transaction-attribute-get): GET /loyalty/transactions/{unique_transaction_attribute} - [Modify a pending Award Transaction using Unique Transaction Attribute](/loyalty-api.html#operation-loyalty-transactions-unique-transaction-attribute-post): POST /loyalty/transactions/{unique_transaction_attribute} - [Approve a Pending Award/Redeem Transaction using ID](/loyalty-api.html#operation-loyalty-transactions-id-approve-post): POST /loyalty/transactions/{id}/approve - [Approve a pending award transaction using Order ID](/loyalty-api.html#operation-loyalty-transactions-order-id-approve-post): POST /loyalty/transactions/{order_id}/approve - [Approve a Pending Award/Redeem Transaction using Unique Transaction Attribute](/loyalty-api.html#operation-loyalty-transactions-unique-transaction-attribute-approve-post): POST /loyalty/transactions/{unique_transaction_attribute}/approve - [Reject a pending award/redeem transaction using ID](/loyalty-api.html#operation-loyalty-transactions-id-reject-post): POST /loyalty/transactions/{id}/reject - [Reject a Pending Award/Redeem Transaction using Unique Transaction Attribute](/loyalty-api.html#operation-loyalty-transactions-unique-transaction-attribute-reject-post): POST /loyalty/transactions/{unique_transaction_attribute}/reject - [List all Transactions](/loyalty-api.html#operation-loyalty-transactions-get): GET /loyalty/transactions - [List all Transactions with Member ID](/loyalty-api.html#operation-loyalty-members-member-id-transactions-get): GET /loyalty/members/{member_id}/transactions - [List all Transactions with TrueLoyal-generated Member ID](/loyalty-api.html#operation-loyalty-members-id-transactions-get): GET /loyalty/members/{id}/transactions - [List all Tiers API](/loyalty-api.html#operation-loyalty-tiers-get): GET /loyalty/tiers - [List Member's Eligible Activities API](/loyalty-api.html#operation-loyalty-storefront-eligible-activities-get): GET /loyalty-storefront/eligible-activities - [List Member's Eligible Rewards API](/loyalty-api.html#operation-loyalty-storefront-eligible-rewards-get): GET /loyalty-storefront/eligible-rewards - [Redeem API](/loyalty-api.html#operation-loyalty-storefront-redeem-post): POST /loyalty-storefront/redeem - [Retrieve a Loyalty Member Details API](/loyalty-api.html#operation-loyalty-storefront-member-get): GET /loyalty-storefront/member - [Update Loyalty Member API](/loyalty-api.html#operation-loyalty-storefront-member-post): POST /loyalty-storefront/member - [Get Activity Track Codes API](/loyalty-api.html#operation-loyalty-storefront-activity-track-code-get): GET /loyalty-storefront/activity-track-code - [List Member's Transaction API](/loyalty-api.html#operation-loyalty-storefront-transactions-get): GET /loyalty-storefront/transactions - [Perform an Activity API](/loyalty-api.html#operation-loyalty-storefront-perform-activity-post): POST /loyalty-storefront/perform-activity - [Reject a pending redemption](/loyalty-api.html#operation-loyalty-storefront-transactions-reject-post): POST /loyalty-storefront/transactions/reject - [Get potential points](/loyalty-api.html#operation-loyalty-storefront-get-potential-points-get): GET /loyalty-storefront/get-potential-points - [EUD Guest Activities API](/loyalty-api.html#operation-loyalty-storefront-activities-get): GET /loyalty-storefront/activities - This page will help you get started with Guest Member API. - [EUD Guest Rewards API](/loyalty-api.html#operation-loyalty-storefront-rewards-get): GET /loyalty-storefront/rewards - [EUD Guest Tiers API](/loyalty-api.html#operation-loyalty-storefront-tiers-get): GET /loyalty-storefront/tiers ## Loyalty Webhooks Reference - [Overview](/loyalty/webhook-events/overview.html): Every event we can send to your webhooks. - [event_member_enrol](/loyalty/webhook-events/event-member-enrol.html): The User Enrollment event occurs whenever a new user enrolls in the TrueLoyal loyalty program. - [event_member_update](/loyalty/webhook-events/event-member-update.html): This event will occur when the member's attributes are changed. - [event_member_delete](/loyalty/webhook-events/event-member-delete.html): The member delete event occurs whenever a user or users are deleted from the admin console. - [event_member_tierupgrade](/loyalty/webhook-events/event-member-tierupgrade.html): The tier upgrade event occurs whenever a customer earns enough points to move up to a higher tier. - [event_member_tierdowngrade](/loyalty/webhook-events/event-member-tierdowngrade.html): The tier downgrade event occurs whenever a customer is downgraded to a lower tier for not having enough points to stay on the current tier. - [event_member_otp_generation](/loyalty/webhook-events/event-member-otp-generation.html): The member_otp_generation event occurs whenever a user requests an OTP for user authentication into the TrueLoyal loyalty program. - [event_points_earned](/loyalty/webhook-events/event-points-earned.html): The Points Awarded event occurs when a user or users are awarded loyalty points. - [event_points_redeemed](/loyalty/webhook-events/event-points-redeemed.html): The Points Redeemed event occurs whenever a user redeems his loyalty points. - [event_points_deducted](/loyalty/webhook-events/event-points-deducted.html): The Points Deducted event occurs whenever points are deducted from a user’s loyalty point balance. - [event_points_expired](/loyalty/webhook-events/event-points-expired.html): The Points Expired event occurs whenever loyalty points in a customer's loyalty account balance expire. - [event_points_rejected](/loyalty/webhook-events/event-points-rejected.html): This event will occur whenever a user's or users pending points are rejected in moderation. - [event_friend_incentive_request](/loyalty/webhook-events/event-friend-incentive-request.html): This event occurs when a friend clicks on the referral link shared by a user and enters their email to claim a reward. - [event_referral_link_share](/loyalty/webhook-events/event-referral-link-share.html): This event will occur when the referral link is shared through email or via social channels. - [event_referral_success](/loyalty/webhook-events/event-referral-success.html): This event will occur when the referred friend clicks on the referral link and makes his first purchase. - [event_winback_offer](/loyalty/webhook-events/event-winback-offer.html): The winback offer occurs when a user has been inactive for an extended period of time. - [event_available_rewards_reminder](/loyalty/webhook-events/event-available-rewards-reminder.html): The available rewards reminder event occurs when the user earns enough points to redeem rewards. - [event_points_expiration_reminder](/loyalty/webhook-events/event-points-expiration-reminder.html): The points expiration reminder occurs whenever a user's points are about to expire. - [event_rewards_within_reach_reminder](/loyalty/webhook-events/event-rewards-within-reach-reminder.html): The rewards within reach reminder event occurs whenever a user earns 80% of the required points to redeem the reward. - [event_campaign_entered](/loyalty/webhook-events/event-campaign-entered.html): This event will occur when a member or members enter a campaign. - [event_campaign_exited](/loyalty/webhook-events/event-campaign-exited.html): This event will occur when a member or members exit a campaign. - [event_member_import_success](/loyalty/webhook-events/event-member-import-success.html): The Member Import Success event occurs when every row of a member import file was imported. - [event_member_import_failure](/loyalty/webhook-events/event-member-import-failure.html): The Member Import Failure event occurs when a member import file finished processing with at least one row that couldn't be imported. - [event_transaction_import_success](/loyalty/webhook-events/event-transaction-import-success.html): The Transaction Import Success event occurs when every row of a transaction import (batch) file was processed. - [event_transaction_import_failure](/loyalty/webhook-events/event-transaction-import-failure.html): The Transaction Import Failure event occurs when a transaction import (batch) file finished processing with at least one row that couldn't be processed. - [event_bulk_job_success](/loyalty/webhook-events/event-bulk-job-success.html): The Bulk Job Success event occurs when every record of a bulk job was processed. - [event_bulk_job_failure](/loyalty/webhook-events/event-bulk-job-failure.html): The Bulk Job Failure event occurs when a bulk job completed with at least one record that couldn't be processed. - [event_workflow_run_failure](/loyalty/webhook-events/event-workflow-run-failure.html): The Workflow Run Failure event occurs when a run of a workflow fails. - [event_workflow_event](/loyalty/webhook-events/event-workflow-event.html): The Workflow event is sent by the webhook step of a workflow, to the webhooks chosen in that step, with the data configured in it. ## Advocacy API Reference - [TrueLoyal Advocacy API](/advocacy-api.html): The reference for every endpoint of the TrueLoyal Advocacy API. Start with the [guides](guides/introduction.html) for authentication, pagination, versioning and the JSON:API conventions the API follows. - [Authorize an application using the authorization code flow](/advocacy-api.html#operation-oauth-authorize-get): GET /oauth/authorize - Redirect the user to this URL to request authorization. The user signs in (if needed) and approves the requested scopes, after which they are redirected to `redirect_uri` with a `code` query parameter (and the `state` you provided). The code expires after 5 minutes; exchange it for an access token with [Create an access token](#operation-oauth-token-post). PKCE is required for public (non-confidential) applications and recommended for all: send a `code_challenge` here and the matching `code_verifier` when exchanging the code. Applications created with the API are confidential. - [Create an access token](/advocacy-api.html#operation-oauth-token-post): POST /oauth/token - Exchanges an authorization code for an access token (`grant_type=authorization_code`), or uses a refresh token to obtain a new access token (`grant_type=refresh_token`). Access tokens expire after one hour; use the refresh token to get a new one. - [Retrieve a list of accounts](/advocacy-api.html#operation-v2-teams-team-id-accounts-get): GET /v2/teams/{team_id}/accounts - Returns the accounts the user has access to. - [Create an account](/advocacy-api.html#operation-v2-teams-team-id-accounts-post): POST /v2/teams/{team_id}/accounts - Connects an account that uses credentials (API keys, passwords, etc.) rather than OAuth, such as an SFTP product feed or a reCAPTCHA site key. The credentials are never returned. An account with the same type and external ID can only be connected once per team. - [Retrieve an account](/advocacy-api.html#operation-v2-teams-team-id-accounts-account-id-get): GET /v2/teams/{team_id}/accounts/{account_id} - [Delete an account](/advocacy-api.html#operation-v2-teams-team-id-accounts-account-id-delete): DELETE /v2/teams/{team_id}/accounts/{account_id} - Only accounts that are not in use by any social feed can be deleted; otherwise a `403` error is returned. - [Reauthenticate an account](/advocacy-api.html#operation-v2-teams-team-id-accounts-account-id-edit-get): GET /v2/teams/{team_id}/accounts/{account_id}/edit - Returns the URL of the third-party authorization page for the account. Open this URL (usually in a popup window) so the user can grant access again. Once the user completes the authorization flow, the account's credentials are updated and the result is delivered using the `origin` or `redirect_uri` options. The user must authorize the same external account; otherwise the callback fails with a `422` error. Accounts connected with credentials (see [Create an account](#operation-v2-teams-team-id-accounts-post)) can't be reauthenticated and return a `422` error. - [Retrieve a list of subaccounts for an account](/advocacy-api.html#operation-v2-teams-team-id-accounts-account-id-subaccounts-get): GET /v2/teams/{team_id}/accounts/{account_id}/subaccounts - Returns the pages, organizations, channels, boards, etc. that can be accessed with the account, sorted by ID. Subaccounts are refreshed from the source whenever the account is authenticated. - [Authenticate an account](/advocacy-api.html#operation-v2-teams-team-id-accounts-new-get): GET /v2/teams/{team_id}/accounts/new - Returns the URL of the third-party authorization page for the requested account type. Open this URL (usually in a popup window) so the user can grant access. Once the user completes the authorization flow, the account is created (and its subaccounts are fetched) and the result is delivered using the `origin` or `redirect_uri` options. If the same external account is already connected to the team, the callback fails with a `422` error. - [Retrieve a list of subaccounts](/advocacy-api.html#operation-v2-teams-team-id-subaccounts-get): GET /v2/teams/{team_id}/subaccounts - [Create a product feed refresh request](/advocacy-api.html#operation-v2-teams-team-id-product-feeds-product-feed-id-product-feed-refresh-requests-post): POST /v2/teams/{team_id}/product_feeds/{product_feed_id}/product_feed_refresh_requests - Asynchronously re-syncs a product feed or, for `csv` product feeds, imports a new CSV file. All product feeds, with - [Retrieve a product feed refresh request](/advocacy-api.html#operation-v2-teams-team-id-product-feeds-product-feed-id-product-feed-refresh-requests-product-feed-refresh-request-id-get): GET /v2/teams/{team_id}/product_feeds/{product_feed_id}/product_feed_refresh_requests/{product_feed_refresh_request_id} - Returns the status of a product feed refresh request. - [Retrieve a list of products](/advocacy-api.html#operation-v2-teams-team-id-products-get): GET /v2/teams/{team_id}/products - Returns the products of the product feeds you have access to. Only `active` products are returned unless you filter on `status`. Also available as a CSV file (see the `text/csv` response). - [Create a product](/advocacy-api.html#operation-v2-teams-team-id-products-post): POST /v2/teams/{team_id}/products - Creates a product in a `manual` product feed. Products of other product feeds are managed by their source and can't be created using the API. - [Retrieve a product](/advocacy-api.html#operation-v2-teams-team-id-products-product-id-get): GET /v2/teams/{team_id}/products/{product_id} - [Delete a product](/advocacy-api.html#operation-v2-teams-team-id-products-product-id-delete): DELETE /v2/teams/{team_id}/products/{product_id} - Only products of `manual` product feeds can be deleted; other products return `404 Not Found`. - [Update a product](/advocacy-api.html#operation-v2-teams-team-id-products-product-id-patch): PATCH /v2/teams/{team_id}/products/{product_id} - Products of `manual` product feeds can be fully updated. Products of other product feeds are kept in sync with their source, so only their `status` can be changed (for example, to archive a product). - [Retrieve a list of scheduled contents](/advocacy-api.html#operation-v2-teams-team-id-scheduled-contents-get): GET /v2/teams/{team_id}/scheduled_contents - By default, only contents scheduled to be published in the last 14 days or later are returned; use `filter[published_at]` to change the range. - [Create a scheduled content](/advocacy-api.html#operation-v2-teams-team-id-scheduled-contents-post): POST /v2/teams/{team_id}/scheduled_contents - Schedules content to be published to a connected account. Validation rules (required attributes, caption length and file limits) depend on the account's network. - [Retrieve a scheduled content](/advocacy-api.html#operation-v2-teams-team-id-scheduled-contents-scheduled-content-id-get): GET /v2/teams/{team_id}/scheduled_contents/{scheduled_content_id} - Retrieves one of the team's scheduled contents. - [Delete a scheduled content](/advocacy-api.html#operation-v2-teams-team-id-scheduled-contents-scheduled-content-id-delete): DELETE /v2/teams/{team_id}/scheduled_contents/{scheduled_content_id} - Deletes the scheduled content. - [Update a scheduled content](/advocacy-api.html#operation-v2-teams-team-id-scheduled-contents-scheduled-content-id-patch): PATCH /v2/teams/{team_id}/scheduled_contents/{scheduled_content_id} - Only `pending` and `failed` scheduled contents can be updated; a `success` content returns 404. - [Retrieve aggregations for scheduled contents](/advocacy-api.html#operation-v2-teams-team-id-scheduled-contents-aggregations-get): GET /v2/teams/{team_id}/scheduled_contents/aggregations - Returns the number of scheduled contents of the team per tag, account and subaccount, across all statuses and dates. - [Retrieve a list of campaigns](/advocacy-api.html#operation-v2-teams-team-id-campaigns-get): GET /v2/teams/{team_id}/campaigns - Returns the team's campaigns. - [Create a campaign](/advocacy-api.html#operation-v2-teams-team-id-campaigns-post): POST /v2/teams/{team_id}/campaigns - Creates a campaign. - [Retrieve a campaign](/advocacy-api.html#operation-v2-teams-team-id-campaigns-campaign-id-get): GET /v2/teams/{team_id}/campaigns/{campaign_id} - [Delete a campaign](/advocacy-api.html#operation-v2-teams-team-id-campaigns-campaign-id-delete): DELETE /v2/teams/{team_id}/campaigns/{campaign_id} - Deleting a campaign also removes it from the scheduled content it was associated with. - [Update a campaign](/advocacy-api.html#operation-v2-teams-team-id-campaigns-campaign-id-patch): PATCH /v2/teams/{team_id}/campaigns/{campaign_id} - [Retrieve a list of product feeds](/advocacy-api.html#operation-v2-teams-team-id-product-feeds-get): GET /v2/teams/{team_id}/product_feeds - [Create a product feed](/advocacy-api.html#operation-v2-teams-team-id-product-feeds-post): POST /v2/teams/{team_id}/product_feeds - Creates a product feed and starts importing its products in the background (except for `manual` feeds, whose products are created using the API). Which attributes are required depends on `source`. - [Retrieve a product feed](/advocacy-api.html#operation-v2-teams-team-id-product-feeds-product-feed-id-get): GET /v2/teams/{team_id}/product_feeds/{product_feed_id} - [Delete a product feed](/advocacy-api.html#operation-v2-teams-team-id-product-feeds-product-feed-id-delete): DELETE /v2/teams/{team_id}/product_feeds/{product_feed_id} - Deletes the product feed and all of its products. - [Retrieve a list of product accounts](/advocacy-api.html#operation-v2-teams-team-id-product-accounts-get): GET /v2/teams/{team_id}/product_accounts - [Create a product account](/advocacy-api.html#operation-v2-teams-team-id-product-accounts-post): POST /v2/teams/{team_id}/product_accounts - Connects a product integration using credentials, without going through the authorization flow. Which attributes are required depends on `type`. The account profile is fetched from the source before the response is returned. - [Retrieve a product account](/advocacy-api.html#operation-v2-teams-team-id-product-accounts-product-account-id-get): GET /v2/teams/{team_id}/product_accounts/{product_account_id} - [Delete a product account](/advocacy-api.html#operation-v2-teams-team-id-product-accounts-product-account-id-delete): DELETE /v2/teams/{team_id}/product_accounts/{product_account_id} - Only product accounts without product feeds can be deleted; otherwise the request fails with `403 Forbidden`. Delete the product feeds first. - [Update a product account](/advocacy-api.html#operation-v2-teams-team-id-product-accounts-product-account-id-patch): PATCH /v2/teams/{team_id}/product_accounts/{product_account_id} - Updates the credentials of a product account. Changing credentials resets `status` to `ok`. - [Reauthenticate a product account](/advocacy-api.html#operation-v2-teams-team-id-product-accounts-product-account-id-edit-get): GET /v2/teams/{team_id}/product_accounts/{product_account_id}/edit - Returns the URL of the third-party authorization page for the product account. Open this URL (usually in a popup window) so the user can grant access again. Once the user completes the authorization flow, the product account is updated and the result is delivered using the `origin` or `redirect_uri` options. - [Authenticate a product account](/advocacy-api.html#operation-v2-teams-team-id-product-accounts-new-get): GET /v2/teams/{team_id}/product_accounts/new - Returns the URL of the third-party authorization page for the requested product account type. Open this URL (usually in a popup window) so the user can grant access. Once the user completes the authorization flow, the product account is created and the result is delivered using the `origin` or `redirect_uri` options. - [Create a product tag](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-product-tags-post): POST /v2/teams/{team_id}/tints/{tint_id}/product_tags - Tags a product in a post of the board, optionally within a bounding box of the post's media. - [Delete a product tag](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-product-tags-product-tag-id-delete): DELETE /v2/teams/{team_id}/tints/{tint_id}/product_tags/{product_tag_id} - Removes the product tag from the post. - [Update a product tag](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-product-tags-product-tag-id-patch): PATCH /v2/teams/{team_id}/tints/{tint_id}/product_tags/{product_tag_id} - Changes the bounding box or the tagged product. - [Retrieve a list of marketing integrations](/advocacy-api.html#operation-v2-teams-team-id-marketing-integrations-get): GET /v2/teams/{team_id}/marketing_integrations - [Create a marketing integration](/advocacy-api.html#operation-v2-teams-team-id-marketing-integrations-post): POST /v2/teams/{team_id}/marketing_integrations - Connects a marketing integration using credentials. Except for `twitter`, the credentials are checked by fetching the account's profile from the source. The credentials are never returned. - [Delete a marketing integration](/advocacy-api.html#operation-v2-teams-team-id-marketing-integrations-marketing-integration-id-delete): DELETE /v2/teams/{team_id}/marketing_integrations/{marketing_integration_id} - [Reauthenticate a marketing integration](/advocacy-api.html#operation-v2-teams-team-id-marketing-integrations-marketing-integration-id-edit-get): GET /v2/teams/{team_id}/marketing_integrations/{marketing_integration_id}/edit - Returns the URL of the third-party authorization page for the marketing integration. Open this URL (usually in a popup window) so the user can grant access again. Once the user completes the authorization flow, the marketing integration is updated and the result is delivered using the `origin` or `redirect_uri` options. - [Retrieve a list of marketing integration folders](/advocacy-api.html#operation-v2-teams-team-id-marketing-integrations-marketing-integration-id-folders-get): GET /v2/teams/{team_id}/marketing_integrations/{marketing_integration_id}/folders - A folder is a remote group or collection that can be accessed directly using the specified marketing integration's credentials. Use a folder's `id` as the `folder_id` when [creating marketing integration requests](#operation-v2-teams-team-id-marketing-integrations-marketing-integration-id-requests-post). Sources without folders return an empty list. - [Authenticate a marketing integration](/advocacy-api.html#operation-v2-teams-team-id-marketing-integrations-new-get): GET /v2/teams/{team_id}/marketing_integrations/new - Returns the URL of the third-party authorization page for the requested source. Open this URL (usually in a popup window) so the user can grant access. Once the user completes the authorization flow, the marketing integration is created and the result is delivered using the `origin` or `redirect_uri` options. - [Create marketing integration requests](/advocacy-api.html#operation-v2-teams-team-id-marketing-integrations-marketing-integration-id-requests-post): POST /v2/teams/{team_id}/marketing_integrations/{marketing_integration_id}/requests - Asynchronously publishes assets or collections to a marketing integration. One request is created per published asset (publishing a collection creates one request per asset in the collection). - [Retrieve a public mix](/advocacy-api.html#operation-v2-mixes-mix-id-get): GET /v2/mixes/{mix_id} - This endpoint is public and doesn't require an access token. - [Retrieve a list of mixes](/advocacy-api.html#operation-v2-teams-team-id-mixes-get): GET /v2/teams/{team_id}/mixes - Returns the mixes you have access to. - [Create a mix](/advocacy-api.html#operation-v2-teams-team-id-mixes-post): POST /v2/teams/{team_id}/mixes - Fails with `402` when the team has reached its plan's mix limit. - [Delete multiple mixes](/advocacy-api.html#operation-v2-teams-team-id-mixes-delete): DELETE /v2/teams/{team_id}/mixes - Deletes several mixes at once. - [Retrieve a mix](/advocacy-api.html#operation-v2-teams-team-id-mixes-mix-id-get): GET /v2/teams/{team_id}/mixes/{mix_id} - Retrieves one of the team's mixes. - [Delete a mix](/advocacy-api.html#operation-v2-teams-team-id-mixes-mix-id-delete): DELETE /v2/teams/{team_id}/mixes/{mix_id} - Deletes the mix. - [Update a mix](/advocacy-api.html#operation-v2-teams-team-id-mixes-mix-id-patch): PATCH /v2/teams/{team_id}/mixes/{mix_id} - Updates the mix. - [Retrieve a list of personalizations](/advocacy-api.html#operation-v2-teams-team-id-personalizations-get): GET /v2/teams/{team_id}/personalizations - Returns the personalizations the user has access to. - [Create a personalization](/advocacy-api.html#operation-v2-teams-team-id-personalizations-post): POST /v2/teams/{team_id}/personalizations - Creates a personalization and grants access to it to the user's role and to the roles that have access to new personalizations. - [Delete multiple personalizations](/advocacy-api.html#operation-v2-teams-team-id-personalizations-delete): DELETE /v2/teams/{team_id}/personalizations - Deletes several personalizations at once. - [Update multiple personalizations](/advocacy-api.html#operation-v2-teams-team-id-personalizations-patch): PATCH /v2/teams/{team_id}/personalizations - Only `name`, `theme`, `tags` and `status` are saved. `PUT` is accepted as an alias of `PATCH`. - [Retrieve a personalization](/advocacy-api.html#operation-v2-teams-team-id-personalizations-personalization-id-get): GET /v2/teams/{team_id}/personalizations/{personalization_id} - With an access token, retrieves one of the personalizations the user has access to. Without an `Authorization` header, retrieves any `active` personalization with a reduced set of attributes and only the published settings. - [Delete a personalization](/advocacy-api.html#operation-v2-teams-team-id-personalizations-personalization-id-delete): DELETE /v2/teams/{team_id}/personalizations/{personalization_id} - Deletes the personalization. - [Update a personalization](/advocacy-api.html#operation-v2-teams-team-id-personalizations-personalization-id-patch): PATCH /v2/teams/{team_id}/personalizations/{personalization_id} - `PUT` is accepted as an alias of `PATCH`. - [Create a reply](/advocacy-api.html#operation-v2-teams-team-id-replies-post): POST /v2/teams/{team_id}/replies - Replies to a post. When the post's author has an email address and the social feed has an email template, the reply is also emailed to the author. - [Delete a reply](/advocacy-api.html#operation-v2-teams-team-id-replies-reply-id-delete): DELETE /v2/teams/{team_id}/replies/{reply_id} - Deletes the reply. - [Update a reply](/advocacy-api.html#operation-v2-teams-team-id-replies-reply-id-patch): PATCH /v2/teams/{team_id}/replies/{reply_id} - Updates the reply. - [Retrieve a list of right requests](/advocacy-api.html#operation-v2-teams-team-id-right-requests-get): GET /v2/teams/{team_id}/right_requests - Returns the team's right requests for posts in the team's boards, as well as requests for Instagram posts requested by URL. - [Create a right request](/advocacy-api.html#operation-v2-teams-team-id-right-requests-post): POST /v2/teams/{team_id}/right_requests - Asks the author of a post for the rights to reuse it. The message is generated from the template and sent from the given account; for X (Twitter), it is sent a few seconds later, so the right request starts as `pending`. For the other sources, it starts as `requested`. - [Retrieve a right request](/advocacy-api.html#operation-v2-teams-team-id-right-requests-right-request-id-get): GET /v2/teams/{team_id}/right_requests/{right_request_id} - Retrieves a right request. - [Retrieve right request metrics](/advocacy-api.html#operation-v2-teams-team-id-right-requests-metrics-measure-name-get): GET /v2/teams/{team_id}/right_requests/metrics/{measure_name} - Counts the right requests created or approved over time, optionally grouped by one or more dimensions. Only right requests sent from accounts connected by the current user are counted. - [Retrieve a list of right request terms](/advocacy-api.html#operation-v2-teams-team-id-right-requests-terms-get): GET /v2/teams/{team_id}/right_requests/terms - Returns the team's published right request terms. Archived (deleted) terms are not included. - [Create a right request term](/advocacy-api.html#operation-v2-teams-team-id-right-requests-terms-post): POST /v2/teams/{team_id}/right_requests/terms - Creates a right request term. - [Retrieve a list of right request terms for a board](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-right-requests-terms-get): GET /v2/teams/{team_id}/tints/{tint_id}/right_requests/terms - Returns the team's published right request terms. The board must belong to the team (otherwise a 404 is returned), but the list isn't currently narrowed down to terms limited to that board. - [Retrieve a right request term](/advocacy-api.html#operation-v2-teams-team-id-right-requests-terms-right-request-term-id-get): GET /v2/teams/{team_id}/right_requests/terms/{right_request_term_id} - Unlike the other right request term endpoints, this one also returns archived terms, so they can be displayed to authors who want to review the terms they were asked to accept. It requires an access token for a member of the team (a 403 is returned otherwise, including when no access token is given), but no specific scope. The `tint` relationship is only returned when the access token has the `tints:read` scope. - [Delete a right request term](/advocacy-api.html#operation-v2-teams-team-id-right-requests-terms-right-request-term-id-delete): DELETE /v2/teams/{team_id}/right_requests/terms/{right_request_term_id} - Archives the terms rather than permanently deleting them, so existing right requests keep pointing to them. Archived terms can't be deleted again (404). - [Retrieve a list of right request templates](/advocacy-api.html#operation-v2-teams-team-id-right-requests-templates-get): GET /v2/teams/{team_id}/right_requests/templates - Returns the team's right request templates. When the team doesn't have any yet, a default set of templates is created for it first. - [Create a right request template](/advocacy-api.html#operation-v2-teams-team-id-right-requests-templates-post): POST /v2/teams/{team_id}/right_requests/templates - Creates a right request template. - [Retrieve a list of right request templates for a board](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-right-requests-templates-get): GET /v2/teams/{team_id}/tints/{tint_id}/right_requests/templates - Returns the team's right request templates. The list isn't currently narrowed down to templates limited to the board. When the team doesn't have any templates yet, a default set is created for it first. - [Delete a right request template](/advocacy-api.html#operation-v2-teams-team-id-right-requests-templates-right-request-template-id-delete): DELETE /v2/teams/{team_id}/right_requests/templates/{right_request_template_id} - Permanently deletes the template. - [Update a right request template](/advocacy-api.html#operation-v2-teams-team-id-right-requests-templates-right-request-template-id-patch): PATCH /v2/teams/{team_id}/right_requests/templates/{right_request_template_id} - Updates a right request template. - [Retrieve a list of teams](/advocacy-api.html#operation-v2-teams-get): GET /v2/teams - Returns the teams the authenticated user is a member of. - [Create a team](/advocacy-api.html#operation-v2-teams-post): POST /v2/teams - Creates a team on a self-service plan, subscribes it to the plan using the payment token, and makes the authenticated user its administrator. If the payment token can't be processed, the request fails with a `422 Unprocessable Entity` error on `billing_platform_token`. - [Retrieve a team](/advocacy-api.html#operation-v2-teams-team-id-get): GET /v2/teams/{team_id} - Returns a team the authenticated user is a member of. - [Delete a team](/advocacy-api.html#operation-v2-teams-team-id-delete): DELETE /v2/teams/{team_id} - Cancels the team's subscription at the end of the current billing period. Only available to teams billed through Chargify; otherwise, the request fails with a `403 Forbidden` error. - [Update a team](/advocacy-api.html#operation-v2-teams-team-id-patch): PATCH /v2/teams/{team_id} - Updates the team. - [Retrieve a list of domains](/advocacy-api.html#operation-v2-teams-team-id-domains-get): GET /v2/teams/{team_id}/domains - Retrieves the team's domains that the user has access to. - [Create a domain](/advocacy-api.html#operation-v2-teams-team-id-domains-post): POST /v2/teams/{team_id}/domains - Adds a custom domain to the team and starts issuing its SSL certificate; the domain's `status` is `pending` until the certificate has been issued. The new domain is automatically shared with the user's role and with every role that has access to new domains. - [Retrieve a domain](/advocacy-api.html#operation-v2-teams-team-id-domains-domain-id-get): GET /v2/teams/{team_id}/domains/{domain_id} - Retrieves one of the team's domains. - [Delete a domain](/advocacy-api.html#operation-v2-teams-team-id-domains-domain-id-delete): DELETE /v2/teams/{team_id}/domains/{domain_id} - Deletes the domain. Experiences published on it are detached from the domain. - [Update a domain](/advocacy-api.html#operation-v2-teams-team-id-domains-domain-id-patch): PATCH /v2/teams/{team_id}/domains/{domain_id} - Sets or clears the experience shown at the root of the domain. The domain's name can't be changed. - [Retrieve a list of email templates](/advocacy-api.html#operation-v2-teams-team-id-email-templates-get): GET /v2/teams/{team_id}/email_templates - Retrieves the team's email templates. Any member of the team can list them. - [Create an email template](/advocacy-api.html#operation-v2-teams-team-id-email-templates-post): POST /v2/teams/{team_id}/email_templates - Creates an email template for the team. Any member of the team can create one. - [Delete multiple email templates](/advocacy-api.html#operation-v2-teams-team-id-email-templates-delete): DELETE /v2/teams/{team_id}/email_templates - Deletes several of the team's email templates at once. IDs that don't match one of the team's templates are ignored. - [Retrieve an email template](/advocacy-api.html#operation-v2-teams-team-id-email-templates-email-template-id-get): GET /v2/teams/{team_id}/email_templates/{email_template_id} - Retrieves one of the team's email templates. - [Delete an email template](/advocacy-api.html#operation-v2-teams-team-id-email-templates-email-template-id-delete): DELETE /v2/teams/{team_id}/email_templates/{email_template_id} - Deletes the email template. - [Update an email template](/advocacy-api.html#operation-v2-teams-team-id-email-templates-email-template-id-patch): PATCH /v2/teams/{team_id}/email_templates/{email_template_id} - Updates the template's name or content. The template's `type` can't be changed. - [Retrieve a list of fonts](/advocacy-api.html#operation-v2-teams-team-id-fonts-get): GET /v2/teams/{team_id}/fonts - Retrieves the team's fonts that the user has access to. - [Create a font](/advocacy-api.html#operation-v2-teams-team-id-fonts-post): POST /v2/teams/{team_id}/fonts - Creates a font from a file uploaded with the font upload endpoint. Creating a font takes three steps: create an upload, send the file to the upload's `url` with its `headers`, then call this endpoint with the upload's `id` as `upload_id`. The format and metrics are detected from the file. The new font is automatically shared with the user's role and with every role that has access to new fonts. - [Create a font upload](/advocacy-api.html#operation-v2-teams-team-id-fonts-upload-post): POST /v2/teams/{team_id}/fonts/upload - Starts a direct upload for a font file. Send the file's bytes to the returned `url` with an HTTP `PUT` request and the returned `headers`, then create the font with the upload's `id` as `upload_id`. Accepted formats are WOFF, WOFF2, TrueType, OpenType, Embedded OpenType, and SVG, up to 5 MB. Any valid access token for a member of the team can create an upload; no specific scope is checked. A missing or invalid token results in a `403`. - [Delete a font](/advocacy-api.html#operation-v2-teams-team-id-fonts-font-id-delete): DELETE /v2/teams/{team_id}/fonts/{font_id} - Deletes one of the team's fonts. - [Retrieve fonts as a CSS stylesheet](/advocacy-api.html#operation-v2-teams-team-id-fonts-font-ids-css-get): GET /v2/teams/{team_id}/fonts/{font_ids}.css - Returns a stylesheet containing one `@font-face` rule per requested font, for use in a `` tag. This is the URL returned in each font's `links.css`. - [Retrieve a list of boards](/advocacy-api.html#operation-v2-teams-team-id-tints-get): GET /v2/teams/{team_id}/tints - Returns the boards you have access to. - [Create a board](/advocacy-api.html#operation-v2-teams-team-id-tints-post): POST /v2/teams/{team_id}/tints - Fails with `402` when the team has reached its plan's board limit. - [Delete multiple boards](/advocacy-api.html#operation-v2-teams-team-id-tints-delete): DELETE /v2/teams/{team_id}/tints - Deletes several boards at once. - [Update multiple boards](/advocacy-api.html#operation-v2-teams-team-id-tints-patch): PATCH /v2/teams/{team_id}/tints - The request is validated as a whole: if any board is invalid, none are updated. - [Retrieve aggregated board engagement metrics](/advocacy-api.html#operation-v2-teams-team-id-tints-metrics-engagements-embed-engagement-type-get): GET /v2/teams/{team_id}/tints/metrics/engagements/{embed_engagement_type} - Counts the engagement events of the team's boards, optionally grouped by one or more dimensions. - [Retrieve a board](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-get): GET /v2/teams/{team_id}/tints/{tint_id} - [Delete a board](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-delete): DELETE /v2/teams/{team_id}/tints/{tint_id} - Deletes the board. - [Update a board](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-patch): PATCH /v2/teams/{team_id}/tints/{tint_id} - Updates the board. - [Retrieve a public board](/advocacy-api.html#operation-v2-tints-tint-slug-get): GET /v2/tints/{tint_slug} - Returns a public board by its slug. No authentication is required; if an `Authorization` header is sent, the access token must have the `tints:read` scope. - [Retrieve my user](/advocacy-api.html#operation-v2-me-get): GET /v2/me - Returns the user who owns the access token. - [Update my user](/advocacy-api.html#operation-v2-me-patch): PATCH /v2/me - Updates the user who owns the access token. Changing the `email` or `password` attributes, or setting `temporary_support_access_ends_at`, additionally requires a valid ID token for the current access token, passed in the `id_token` query parameter; otherwise, the request fails with a `403 Forbidden` error (code `4030002`). A security email is sent to the user when their email or password is changed or when support access is granted. - [Retrieve a list of users](/advocacy-api.html#operation-v2-teams-team-id-users-get): GET /v2/teams/{team_id}/users - Returns the members of the team. - [Invite users to a team](/advocacy-api.html#operation-v2-teams-team-id-users-post): POST /v2/teams/{team_id}/users - Invites a single user (`application/vnd.api+json` with a single resource object) or multiple users (`application/vnd.api+json; ext=bulk` with an array of resource objects) to the team, and emails them an invitation. An account is created for email addresses that don't have one yet. The response contains a single user or an array of users accordingly. - [Remove multiple users from a team](/advocacy-api.html#operation-v2-teams-team-id-users-delete): DELETE /v2/teams/{team_id}/users - The authenticated user can't remove themselves and is skipped, as are users that aren't members of the team. - [Update multiple users](/advocacy-api.html#operation-v2-teams-team-id-users-patch): PATCH /v2/teams/{team_id}/users - Updates the role and `skip_idp` attribute of several team members at once. Users that aren't members of the team are skipped, and you can't update yourself. `PUT` is also accepted. - [Retrieve a user](/advocacy-api.html#operation-v2-teams-team-id-users-user-id-get): GET /v2/teams/{team_id}/users/{user_id} - Returns a member of the team. - [Remove a user from a team](/advocacy-api.html#operation-v2-teams-team-id-users-user-id-delete): DELETE /v2/teams/{team_id}/users/{user_id} - The authenticated user can't remove themselves. - [Update a user](/advocacy-api.html#operation-v2-teams-team-id-users-user-id-patch): PATCH /v2/teams/{team_id}/users/{user_id} - Updates the role and `skip_idp` attribute of a team member. You can't update yourself. - [Create a user export request](/advocacy-api.html#operation-v2-teams-team-id-users-export-requests-post): POST /v2/teams/{team_id}/users/export/requests - Asynchronously exports the team's users to a CSV file. Once complete, a websocket message of type `teams_user_export_request` containing the ID, status and URL is delivered to the user's private channel (`private-user-` followed by the user's ID). You may also poll the status of the request using the endpoint below. - [Check the status of a user export request](/advocacy-api.html#operation-v2-teams-team-id-users-export-requests-teams-user-export-request-id-get): GET /v2/teams/{team_id}/users/export/requests/{teams_user_export_request_id} - Retrieves the status of one of the team's user export requests. - [Retrieve a list of authentication factors](/advocacy-api.html#operation-v2-authentication-factors-get): GET /v2/authentication_factors - Returns all the authentication factors (pending and active) of the current user. - [Create an authentication factor](/advocacy-api.html#operation-v2-authentication-factors-post): POST /v2/authentication_factors - Adds an authentication factor to the current user. What happens next depends on the kind of authentication factor: - [Delete an authentication factor](/advocacy-api.html#operation-v2-authentication-factors-authentication-factor-id-delete): DELETE /v2/authentication_factors/{authentication_factor_id} - Removes an authentication factor from the current user and emails them about it. If it was the user's default authentication factor, another active authentication factor (other than a recovery code) becomes the default. - [Verify an authentication factor](/advocacy-api.html#operation-v2-authentication-factors-authentication-factor-id-patch): PATCH /v2/authentication_factors/{authentication_factor_id} - Verifies a `pending` authentication factor with a code it received or generated, and marks it `active`. If the user doesn't have a default authentication factor yet, this one becomes the default. An email is sent to the user to let them know an authentication factor was added. Only `pending` authentication factors can be verified; others return `404`. - [Create an authentication factor challenge](/advocacy-api.html#operation-v2-authentication-factors-authentication-factor-id-challenges-post): POST /v2/authentication_factors/{authentication_factor_id}/challenges - Sends a new code for a `pending` `out_of_band` authentication factor, for example when the user didn't receive the first one. A code is already sent when the authentication factor is created, and a new one can only be requested every 30 seconds; earlier requests return `429` with a `Retry-After` header. Authentication factors that are `active` or aren't `out_of_band` return `404`. - [Retrieve a list of assets](/advocacy-api.html#operation-v2-teams-team-id-assets-get): GET /v2/teams/{team_id}/assets - Returns the team's assets that are in a collection the user has access to or in no collection. Returns 503 while search is temporarily unavailable. - [Create assets](/advocacy-api.html#operation-v2-teams-team-id-assets-post): POST /v2/teams/{team_id}/assets - Creates one or more assets asynchronously. Once complete, a websocket message of type `asset_bulk_create_request` is delivered to the team's private channel (`private-team-` followed by the team's ID) with the request's `id` and final `status`. Creation fails when the plan's limit of uploaded assets is reached. - [Delete multiple assets](/advocacy-api.html#operation-v2-teams-team-id-assets-delete): DELETE /v2/teams/{team_id}/assets - Deletes several assets at once. - [Update multiple assets](/advocacy-api.html#operation-v2-teams-team-id-assets-patch): PATCH /v2/teams/{team_id}/assets - Updates several assets at once. If any asset is invalid, none are updated. - [Retrieve an asset](/advocacy-api.html#operation-v2-teams-team-id-assets-asset-id-get): GET /v2/teams/{team_id}/assets/{asset_id} - Returns 404 when the asset is only in collections the user doesn't have access to. - [Delete an asset](/advocacy-api.html#operation-v2-teams-team-id-assets-asset-id-delete): DELETE /v2/teams/{team_id}/assets/{asset_id} - Deletes the asset. - [Update an asset](/advocacy-api.html#operation-v2-teams-team-id-assets-asset-id-patch): PATCH /v2/teams/{team_id}/assets/{asset_id} - Updates the asset. - [Retrieve asset aggregations](/advocacy-api.html#operation-v2-teams-team-id-assets-aggregations-get): GET /v2/teams/{team_id}/assets/aggregations - Returns the number of the team's assets per source, detected object, emotion, media type and tag. Returns 503 while search is temporarily unavailable. - [Retrieve a list of social feeds](/advocacy-api.html#operation-v2-teams-team-id-social-feeds-get): GET /v2/teams/{team_id}/social_feeds - Returns the social feeds of the boards you have access to. - [Create a social feed](/advocacy-api.html#operation-v2-teams-team-id-social-feeds-post): POST /v2/teams/{team_id}/social_feeds - Fails with `402` when the team has reached its plan's limit of active social feeds. For `influencer` social feeds, an authorization request is emailed to the `contact`. - [Update multiple social feeds](/advocacy-api.html#operation-v2-teams-team-id-social-feeds-patch): PATCH /v2/teams/{team_id}/social_feeds - The request is validated as a whole: if any social feed is invalid, none are updated. - [Retrieve a social feed](/advocacy-api.html#operation-v2-teams-team-id-social-feeds-social-feed-id-get): GET /v2/teams/{team_id}/social_feeds/{social_feed_id} - [Delete a social feed](/advocacy-api.html#operation-v2-teams-team-id-social-feeds-social-feed-id-delete): DELETE /v2/teams/{team_id}/social_feeds/{social_feed_id} - Deletes the social feed and the posts it ingested. - [Update a social feed](/advocacy-api.html#operation-v2-teams-team-id-social-feeds-social-feed-id-patch): PATCH /v2/teams/{team_id}/social_feeds/{social_feed_id} - Updates the social feed. - [Retrieve aggregated ingestion metrics for a social feed](/advocacy-api.html#operation-v2-teams-team-id-social-feeds-social-feed-id-metrics-get): GET /v2/teams/{team_id}/social_feeds/{social_feed_id}/metrics - This endpoint is deprecated. Use `GET /v2/teams/{team_id}/posts/metrics/ingested?filter[social_feed_id]={social_feed_id}` instead. - [Retrieve a list of experiences](/advocacy-api.html#operation-v2-teams-team-id-experiences-get): GET /v2/teams/{team_id}/experiences - Returns the experiences the user has access to. - [Create an experience](/advocacy-api.html#operation-v2-teams-team-id-experiences-post): POST /v2/teams/{team_id}/experiences - Creates an experience and grants access to it to the user's role and to the roles that have access to new experiences. - [Delete multiple experiences](/advocacy-api.html#operation-v2-teams-team-id-experiences-delete): DELETE /v2/teams/{team_id}/experiences - Deletes several experiences at once. - [Update multiple experiences](/advocacy-api.html#operation-v2-teams-team-id-experiences-patch): PATCH /v2/teams/{team_id}/experiences - Updates several experiences in a single request. If any experience is invalid, none are updated and the errors are returned. The experience `type` can't be changed. `PUT` is accepted as an alias of `PATCH`. - [Retrieve an experience](/advocacy-api.html#operation-v2-teams-team-id-experiences-experience-id-get): GET /v2/teams/{team_id}/experiences/{experience_id} - With an access token, retrieves one of the experiences the user has access to by ID. Without an `Authorization` header, retrieves a published experience by ID or by slug. When using a slug, `team_id` may also be the name of the experience's custom domain, the request's `Referer` must be allowed for the experience, and the experience's impression count is incremented. - [Delete an experience](/advocacy-api.html#operation-v2-teams-team-id-experiences-experience-id-delete): DELETE /v2/teams/{team_id}/experiences/{experience_id} - Deletes the experience. - [Update an experience](/advocacy-api.html#operation-v2-teams-team-id-experiences-experience-id-patch): PATCH /v2/teams/{team_id}/experiences/{experience_id} - `PUT` is accepted as an alias of `PATCH`. - [Retrieve a list of form submissions](/advocacy-api.html#operation-v2-teams-team-id-experiences-experience-id-form-submissions-get): GET /v2/teams/{team_id}/experiences/{experience_id}/form_submissions - Requires access to the experience. - [Create a form submission](/advocacy-api.html#operation-v2-teams-team-id-experiences-experience-id-form-submissions-post): POST /v2/teams/{team_id}/experiences/{experience_id}/form_submissions - Submits the experience's form. This endpoint is public; the experience must be active, the request's `Referer` must be allowed for the experience, and the captcha token must be valid when the experience uses a captcha. For teams connected to a loyalty program, an optional `Authorization: Bearer` header may carry the loyalty member's JWT; the submission is then linked to that member, and an invalid token is rejected with a `403`. - [Delete all form submissions](/advocacy-api.html#operation-v2-teams-team-id-experiences-experience-id-form-submissions-delete): DELETE /v2/teams/{team_id}/experiences/{experience_id}/form_submissions - Deletes all of the experience's form submissions. Requires access to the experience. - [Delete a form submission](/advocacy-api.html#operation-v2-teams-team-id-experiences-experience-id-form-submissions-form-submission-id-delete): DELETE /v2/teams/{team_id}/experiences/{experience_id}/form_submissions/{form_submission_id} - Deletes the form submission. - [Retrieve form submission metrics](/advocacy-api.html#operation-v2-teams-team-id-experiences-experience-id-form-submissions-metrics-get): GET /v2/teams/{team_id}/experiences/{experience_id}/form_submissions/metrics - Returns form submission counts grouped by the `group` parameter. The request's `Referer` must be allowed for the experience. When called without an `Authorization` header, this endpoint is public. - [Create a form submission export request](/advocacy-api.html#operation-v2-teams-team-id-experiences-experience-id-form-submissions-export-requests-post): POST /v2/teams/{team_id}/experiences/{experience_id}/form_submissions/export/requests - Form submissions are exported asynchronously. Once complete, a websocket message of type `form_submissions_export_request` containing the status and URL is delivered to the user's private channel (`private-user-` followed by the user's ID), and the `exported` webhook event is sent. You may also poll the export request until it completes. - [Retrieve a form submission export request](/advocacy-api.html#operation-v2-teams-team-id-experiences-experience-id-form-submissions-export-requests-form-submission-export-request-id-get): GET /v2/teams/{team_id}/experiences/{experience_id}/form_submissions/export/requests/{form_submission_export_request_id} - Use this endpoint to check the status of an asynchronous form submission export request. Requires access to the exported experience. - [Retrieve a list of posts](/advocacy-api.html#operation-v2-teams-team-id-posts-get): GET /v2/teams/{team_id}/posts - Returns the posts of the boards you have access to, newest pinned posts first by default. Returns `503` while search is temporarily unavailable. - [Delete multiple posts](/advocacy-api.html#operation-v2-teams-team-id-posts-delete): DELETE /v2/teams/{team_id}/posts - Deletes several posts of the board at once. - [Update multiple posts](/advocacy-api.html#operation-v2-teams-team-id-posts-patch): PATCH /v2/teams/{team_id}/posts - The request is validated as a whole: if any post is invalid, none are updated. - [Retrieve aggregated post moderation metrics](/advocacy-api.html#operation-v2-teams-team-id-posts-metrics-moderated-get): GET /v2/teams/{team_id}/posts/metrics/moderated - [Retrieve aggregated post engagement metrics](/advocacy-api.html#operation-v2-teams-team-id-posts-metrics-engagements-post-engagement-type-get): GET /v2/teams/{team_id}/posts/metrics/engagements/{post_engagement_type} - [Retrieve aggregated post ingestion metrics](/advocacy-api.html#operation-v2-teams-team-id-posts-metrics-ingested-get): GET /v2/teams/{team_id}/posts/metrics/ingested - Provides up to 12 months of ingestion metrics. Authentication isn't required when `filter[social_feed_id]` or `filter[tint_id]` is specified; otherwise, the access token must have the `posts:read` scope. - [Delete a post](/advocacy-api.html#operation-v2-teams-team-id-posts-post-id-delete): DELETE /v2/teams/{team_id}/posts/{post_id} - Deletes the post. - [Update a post](/advocacy-api.html#operation-v2-teams-team-id-posts-post-id-patch): PATCH /v2/teams/{team_id}/posts/{post_id} - Updates the post. - [Retrieve a list of posts for a board](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-posts-get): GET /v2/teams/{team_id}/tints/{tint_id}/posts - This endpoint is deprecated. Use `GET /v2/teams/{team_id}/posts?filter[tint_id]={tint_id}` instead, which accepts the same parameters. - [Create a custom post](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-posts-post): POST /v2/teams/{team_id}/tints/{tint_id}/posts - Asynchronously creates a post in the board's custom social feed (the feed is created if it doesn't exist). The response is a post create request; the post itself is created shortly after. - [Retrieve a list of public posts for a board](/advocacy-api.html#operation-v2-tints-tint-slug-posts-get): GET /v2/tints/{tint_slug}/posts - Returns the public posts of a public board. No authentication is required; if an `Authorization` header is sent, the access token must have the `posts:read` scope. - [Create a public post](/advocacy-api.html#operation-v2-tints-tint-slug-posts-post): POST /v2/tints/{tint_slug}/posts - Asynchronously creates a post in the board's public post social feed. No authentication is required; if an `Authorization` header is sent, the access token must have the `posts:write` scope. The response is a post create request whose status can be checked using `GET /v2/tints/{tint_slug}/posts/requests/{post_request_id}`. - [Generate or retrieve a posts summary](/advocacy-api.html#operation-v2-tints-tint-slug-posts-summaries-post): POST /v2/tints/{tint_slug}/posts/summaries - Generates or retrieves a summary of the posts of the specified board. No authentication is required; if an - [Check the status of a post create request](/advocacy-api.html#operation-v2-tints-tint-slug-posts-requests-post-request-id-get): GET /v2/tints/{tint_slug}/posts/requests/{post_request_id} - Returns the status of an asynchronous request created by `POST /v2/tints/{tint_slug}/posts`. No authentication is required; if an `Authorization` header is sent, the access token must have the `posts:read` scope. - [Create a post export request](/advocacy-api.html#operation-v2-teams-team-id-posts-export-requests-post): POST /v2/teams/{team_id}/posts/export/requests - Asynchronously exports posts. Once complete, a websocket message of type `post_export_request` containing the response is delivered to the user's private channel (`private-user-` followed by the user's ID). You may also poll the status of the request using the endpoint below. - [Check the status of a post export request](/advocacy-api.html#operation-v2-teams-team-id-posts-export-requests-post-export-request-id-get): GET /v2/teams/{team_id}/posts/export/requests/{post_export_request_id} - [Retrieve a list of collections](/advocacy-api.html#operation-v2-teams-team-id-collections-get): GET /v2/teams/{team_id}/collections - Returns the collections you have access to. - [Create a collection](/advocacy-api.html#operation-v2-teams-team-id-collections-post): POST /v2/teams/{team_id}/collections - Creates a collection. - [Delete multiple collections](/advocacy-api.html#operation-v2-teams-team-id-collections-delete): DELETE /v2/teams/{team_id}/collections - Deletes several collections at once. - [Update multiple collections](/advocacy-api.html#operation-v2-teams-team-id-collections-patch): PATCH /v2/teams/{team_id}/collections - The request is validated as a whole: if any collection is invalid, none are updated. - [Delete a collection](/advocacy-api.html#operation-v2-teams-team-id-collections-collection-id-delete): DELETE /v2/teams/{team_id}/collections/{collection_id} - Deletes the collection. - [Update a collection](/advocacy-api.html#operation-v2-teams-team-id-collections-collection-id-patch): PATCH /v2/teams/{team_id}/collections/{collection_id} - Updates the collection. - [Retrieve a list of OAuth applications](/advocacy-api.html#operation-v2-teams-team-id-oauth-applications-get): GET /v2/teams/{team_id}/oauth/applications - Returns the team's OAuth applications that the current user has access to through their role. Send a valid `id_token` as well to get the `client_secret` of each application. - [Create an OAuth application](/advocacy-api.html#operation-v2-teams-team-id-oauth-applications-post): POST /v2/teams/{team_id}/oauth/applications - Creates an OAuth application owned by the team. The current user's role, and every role that has access to new OAuth applications, get access to it. Send a valid `id_token` as well to get the `client_secret` in the response. - [Retrieve an OAuth application](/advocacy-api.html#operation-v2-teams-team-id-oauth-applications-oauth-application-id-get): GET /v2/teams/{team_id}/oauth/applications/{oauth_application_id} - Retrieves one of the team's OAuth applications. Send a valid `id_token` as well to get the `client_secret` in the response. - [Delete an OAuth application](/advocacy-api.html#operation-v2-teams-team-id-oauth-applications-oauth-application-id-delete): DELETE /v2/teams/{team_id}/oauth/applications/{oauth_application_id} - Deletes the OAuth application. - [Update an OAuth application](/advocacy-api.html#operation-v2-teams-team-id-oauth-applications-oauth-application-id-patch): PATCH /v2/teams/{team_id}/oauth/applications/{oauth_application_id} - Updates the OAuth application. Send a valid `id_token` as well to get the `client_secret` in the response. - [Retrieve a list of webhooks](/advocacy-api.html#operation-v2-teams-team-id-webhooks-get): GET /v2/teams/{team_id}/webhooks - Returns the webhooks the current user has access to. - [Create a webhook](/advocacy-api.html#operation-v2-teams-team-id-webhooks-post): POST /v2/teams/{team_id}/webhooks - The new webhook is shared with the roles that are granted access to new webhooks and with the current user's role. - [Retrieve a webhook](/advocacy-api.html#operation-v2-teams-team-id-webhooks-webhook-id-get): GET /v2/teams/{team_id}/webhooks/{webhook_id} - Retrieves one of the team's webhooks. - [Delete a webhook](/advocacy-api.html#operation-v2-teams-team-id-webhooks-webhook-id-delete): DELETE /v2/teams/{team_id}/webhooks/{webhook_id} - Deleting a webhook also deletes its events. - [Update a webhook](/advocacy-api.html#operation-v2-teams-team-id-webhooks-webhook-id-patch): PATCH /v2/teams/{team_id}/webhooks/{webhook_id} - Updates the webhook. - [Retrieve a list of webhook events](/advocacy-api.html#operation-v2-teams-team-id-webhooks-webhook-id-events-get): GET /v2/teams/{team_id}/webhooks/{webhook_id}/events - Returns the events recorded for a webhook, with the payload we sent and their delivery status. - [Retrieve a webhook event](/advocacy-api.html#operation-v2-teams-team-id-webhooks-webhook-id-events-webhook-event-id-get): GET /v2/teams/{team_id}/webhooks/{webhook_id}/events/{webhook_event_id} - Retrieves one of the webhook's events, with the payload we sent and its delivery status. - [Retrieve a list of saved filters](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-saved-filters-get): GET /v2/teams/{team_id}/tints/{tint_id}/saved_filters - [Create a saved filter](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-saved-filters-post): POST /v2/teams/{team_id}/tints/{tint_id}/saved_filters - [Retrieve a saved filter](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-saved-filters-saved-filter-id-get): GET /v2/teams/{team_id}/tints/{tint_id}/saved_filters/{saved_filter_id} - [Delete a saved filter](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-saved-filters-saved-filter-id-delete): DELETE /v2/teams/{team_id}/tints/{tint_id}/saved_filters/{saved_filter_id} - [Update a saved filter](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-saved-filters-saved-filter-id-patch): PATCH /v2/teams/{team_id}/tints/{tint_id}/saved_filters/{saved_filter_id} - [Retrieve a list of CTAs](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-ctas-get): GET /v2/teams/{team_id}/tints/{tint_id}/ctas - Returns the CTAs of the board. - [Create a CTA](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-ctas-post): POST /v2/teams/{team_id}/tints/{tint_id}/ctas - Creates a CTA on the board. - [Retrieve a CTA](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-ctas-cta-id-get): GET /v2/teams/{team_id}/tints/{tint_id}/ctas/{cta_id} - Retrieves one of the board's CTAs. - [Delete a CTA](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-ctas-cta-id-delete): DELETE /v2/teams/{team_id}/tints/{tint_id}/ctas/{cta_id} - Deletes the CTA and removes it from every post and saved filter it was applied to. - [Update a CTA](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-ctas-cta-id-patch): PATCH /v2/teams/{team_id}/tints/{tint_id}/ctas/{cta_id} - Updates the CTA. - [Create a CTA association](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-cta-associations-post): POST /v2/teams/{team_id}/tints/{tint_id}/cta_associations - Applies a CTA to a post or a saved filter of the board. A token with either the `posts:write` or the `saved_filters:write` scope is accepted. - [Delete a CTA association](/advocacy-api.html#operation-v2-teams-team-id-tints-tint-id-cta-associations-cta-association-id-delete): DELETE /v2/teams/{team_id}/tints/{tint_id}/cta_associations/{cta_association_id} - Removes a CTA from a post or a saved filter of the board. A token with either the `posts:write` or the `saved_filters:write` scope is accepted. - [Retrieve a list of roles](/advocacy-api.html#operation-v2-teams-team-id-roles-get): GET /v2/teams/{team_id}/roles - Returns the team's roles. - [Create a role](/advocacy-api.html#operation-v2-teams-team-id-roles-post): POST /v2/teams/{team_id}/roles - Creates a role for the team. - [Retrieve a role](/advocacy-api.html#operation-v2-teams-team-id-roles-role-id-get): GET /v2/teams/{team_id}/roles/{role_id} - Retrieves one of the team's roles. - [Delete a role](/advocacy-api.html#operation-v2-teams-team-id-roles-role-id-delete): DELETE /v2/teams/{team_id}/roles/{role_id} - Deletes the role. Team members who are assigned the role are removed from the team along with it. - [Update a role](/advocacy-api.html#operation-v2-teams-team-id-roles-role-id-patch): PATCH /v2/teams/{team_id}/roles/{role_id} - Updates the role. - [Retrieve a list of privacy requests](/advocacy-api.html#operation-v2-teams-team-id-privacy-requests-get): GET /v2/teams/{team_id}/privacy/requests - [Create a privacy request](/advocacy-api.html#operation-v2-teams-team-id-privacy-requests-post): POST /v2/teams/{team_id}/privacy/requests - Creates a privacy request and processes it asynchronously. For an `erasure` request, the loyalty member's form submissions and assets are deleted and their community member profile is anonymized and deactivated. Poll the request until its `status` is `success` or `failure`. - [Retrieve a privacy request](/advocacy-api.html#operation-v2-teams-team-id-privacy-requests-privacy-request-id-get): GET /v2/teams/{team_id}/privacy/requests/{privacy_request_id} ## Advocacy Webhooks Reference - [Overview](/advocacy/webhook-events/overview.html): Every event we can send to your webhooks. - [account_created](/advocacy/webhook-events/account-created.html): Sent when a social or integration account is connected to the team. - [account_updated](/advocacy/webhook-events/account-updated.html): Sent when the `status` of one of the team's accounts changes (for example, when its authorization expires or is renewed). - [account_destroyed](/advocacy/webhook-events/account-destroyed.html): Sent when one of the team's accounts is disconnected (deleted). - [asset_created](/advocacy/webhook-events/asset-created.html): Sent when an asset is added to the team, whether uploaded, imported or created in bulk. - [asset_updated](/advocacy/webhook-events/asset-updated.html): Sent when one of the team's assets changes, including bulk updates. - [asset_destroyed](/advocacy/webhook-events/asset-destroyed.html): Sent when one of the team's assets is deleted, including bulk deletes. - [asset_exported](/advocacy/webhook-events/asset-exported.html): Sent when an asset export (a ZIP file of the requested assets) requested through the API finishes, whether it succeeded or failed. - [form_submission_created](/advocacy/webhook-events/form-submission-created.html): Sent when someone submits one of the team's experiences or forms. - [form_submission_exported](/advocacy/webhook-events/form-submission-exported.html): Sent when a form submission export (a ZIP file) requested through the API finishes, whether it succeeded or failed. - [post_created](/advocacy/webhook-events/post-created.html): Sent when a post is created on one of the boards of the team. - [post_updated](/advocacy/webhook-events/post-updated.html): Sent when a post changes (for example, when it is moderated). - [post_destroyed](/advocacy/webhook-events/post-destroyed.html): Sent when a post is deleted. - [post_exported](/advocacy/webhook-events/post-exported.html): Sent when a board's post export (a CSV file) requested through the API finishes, whether it succeeded or failed. - [product_feed_created](/advocacy/webhook-events/product-feed-created.html): Sent when a product feed is created. - [product_feed_updated](/advocacy/webhook-events/product-feed-updated.html): Sent when a product feed changes, including status changes after a sync. - [product_feed_destroyed](/advocacy/webhook-events/product-feed-destroyed.html): Sent when a product feed is deleted. - [teams_user_exported](/advocacy/webhook-events/teams-user-exported.html): Sent when an export of the team's users (a CSV file) requested through the API finishes, whether it succeeded or failed. - [transaction_exported](/advocacy/webhook-events/transaction-exported.html): Sent when a loyalty transaction export (a ZIP file) requested through the API finishes, whether it succeeded or failed. ## MCP Reference (Beta) - [TrueLoyal](/advocacy-mcp.html): **Beta.** Search, analyze and manage the posts, assets and loyalty programs of your teams from AI assistants such as Claude. See [Connecting AI Assistants](/advocacy/guides/mcp.html) to connect one. - [list_teams](/advocacy-mcp.html#operation-list-teams-tool): tool - Lists the teams you belong to that enabled access for AI assistants (MCP). Every other tool takes the ID of one of these teams. - [list_tints](/advocacy-mcp.html#operation-list-tints-tool): tool - Lists the boards (also called tints) of a team that you have access to. Posts are collected into boards by their social feeds. - [list_social_feeds](/advocacy-mcp.html#operation-list-social-feeds-tool): tool - Lists the social feeds of a team that you have access to. A social feed collects posts from one source into a board, for example an Instagram hashtag, the posts that mention or tag a brand's account, or the reviews of a product. Use their IDs to filter posts by social_feed_id. - [list_saved_filters](/advocacy-mcp.html#operation-list-saved-filters-tool): tool - Lists the saved filters of a board. Pass a saved filter to search_posts or aggregate_posts (with the tint_id of its board) to use it. - [list_accounts](/advocacy-mcp.html#operation-list-accounts-tool): tool - Lists the social and integration accounts connected to a team (for example the brand's Instagram or TikTok account) that you have access to. - [search_posts](/advocacy-mcp.html#operation-search-posts-tool): tool - Searches the posts of a team, newest first by default. Returns up to 100 posts per page and the total number of posts that match, and can page through the first 10000 of them. Teams can have millions of posts, so read a sample of them to summarize or find themes, and use aggregate_posts instead to count posts, rank them or compute averages. - [aggregate_posts](/advocacy-mcp.html#operation-aggregate-posts-tool): tool - Counts the posts of a team that match the filters (the same as search_posts), with the totals asked for, optionally grouped by up to three fields or publication times, each within the previous one, or clustered (for example the creators, by username). For example, average rating for the average rating of reviews, group by network to find which network generated the most content, by username for the top creators, by hour_of_day to see when people post the most, or by username, hashtag and sentiment for the sentiment of the hashtags each author uses the most. - [get_post](/advocacy-mcp.html#operation-get-post-tool): tool - Gets a post of a team, the same as search_posts returns it: its text, author, media, moderation, sentiment, products, right request and the asset earned from it. - [update_posts](/advocacy-mcp.html#operation-update-posts-tool): tool - Updates posts of a team: approves (public) or hides (private) them, sets the reasons, adds or removes tags, sets the alternative text of their images, and highlights or pins them. It can't delete posts. Takes the IDs of up to 250 posts, as returned by search_posts (use several calls for more). Changes appear in searches within a few seconds, and can be undone by updating the posts again. - [search_assets](/advocacy-mcp.html#operation-search-assets-tool): tool - Searches the assets (images and videos) in the library of a team, newest first by default. Returns up to 100 assets per page (1,000 with ids_only) and the total number that match, and can page through the first 10000 of them. Use aggregate_assets instead to count assets, and ids_only to collect the IDs of many assets to update with update_assets. - [aggregate_assets](/advocacy-mcp.html#operation-aggregate-assets-tool): tool - Counts the assets in the library of a team that match the filters (the same as search_assets), with the totals asked for, optionally grouped by up to three fields or the day, week or month they were added, each within the previous one, or clustered (for example the members they came from, by member_id). For example, group by media_type to find whether the team has more images or videos, then by object for the objects they show the most. - [get_asset](/advocacy-mcp.html#operation-get-asset-tool): tool - Gets an asset in the library of a team, the same as search_assets returns it: where it came from (uploaded by the team, earned from a post through a right request, or submitted with a form), when its creator's rights were granted, its collections, the posts it came from and the loyalty member it came from (member_id, see get_member). - [update_assets](/advocacy-mcp.html#operation-update-assets-tool): tool - Updates assets in the library of a team: adds or removes tags, adds them to or removes them from collections, sets their title, description or alternative text, and archives or restores them. Takes the IDs of up to 250 assets, as returned by search_assets (use ids_only to collect many, and several calls to update them). Changes appear in searches within a few seconds, and can be undone by updating the assets again. - [list_collections](/advocacy-mcp.html#operation-list-collections-tool): tool - Lists the collections of assets of a team that you have access to, with the number of active assets in each. Use their IDs to filter assets by collection_id or to add assets to them with update_assets. - [search_members](/advocacy-mcp.html#operation-search-members-tool): tool - Searches the loyalty members (or members) of a team, newest first by default. Returns up to 100 members per page (1,000 with fields) and the total number that match, and can page through the first 10000 of them. Use aggregate_members instead to count members or compute totals. - [aggregate_members](/advocacy-mcp.html#operation-aggregate-members-tool): tool - Counts the loyalty members (or members) of a team that match the conditions (the same as search_members), with the totals asked for, optionally grouped by up to three fields, each within the previous one. For example, group by "created_time:month" for monthly sign-up cohorts, or by loyalty_level_name for the members of each tier, and sum available_points and pending_points for the outstanding points. - [get_member](/advocacy-mcp.html#operation-get-member-tool): tool - Gets a loyalty member (or member) of a team, the same as search_members returns it: their profile, tier, points, purchases, referrals and custom attributes (with the schemas:read scope). Takes their ID or their member UID, which is how most loyalty programs identify their members. - [list_member_attributes](/advocacy-mcp.html#operation-list-member-attributes-tool): tool - Lists the custom attributes of the loyalty members (or members) of a team: their key, name, description, type and the number of members who have them. Members, search_members and aggregate_members have them by key (custom_attributes.), so use this to find an attribute by name. - [create_member_attribute](/advocacy-mcp.html#operation-create-member-attribute-tool): tool - **Early access:** this tool is only available to teams in our early access program. - [search_transactions](/advocacy-mcp.html#operation-search-transactions-tool): tool - Searches the loyalty transactions of a team (the points members earn, redeem, lose or have deducted), newest first by default. Returns up to 100 transactions per page (1,000 with fields) and the total number that match, and can page through the first 10000 of them. Use aggregate_transactions instead to count transactions or compute totals. - [aggregate_transactions](/advocacy-mcp.html#operation-aggregate-transactions-tool): tool - Counts the loyalty transactions of a team that match the conditions (the same as search_transactions), with the totals asked for, optionally grouped by up to three fields, each within the previous one. For example, sum points grouped by transaction_type and "created_time:month" for the points awarded and redeemed each month, count the distinct user_id of redemptions for the number of members who redeemed, group by "created_time:day_of_week" or "created_time:hour_of_day" for when members are active, or group by user_id ordered by sum_points for the members who earned the most. - [get_transaction](/advocacy-mcp.html#operation-get-transaction-tool): tool - Gets a loyalty transaction of a team, the same as search_transactions returns it: the member, the activity, the points and their status, the rules applied and its custom attributes (with the schemas:read scope). - [list_transaction_attributes](/advocacy-mcp.html#operation-list-transaction-attributes-tool): tool - Lists the custom attributes of the loyalty transactions of a team: their key, name, description, type and the number of transactions that have them. Transactions, search_transactions and aggregate_transactions have them by key (custom_attributes.), so use this to find an attribute by name. - [create_transaction_attribute](/advocacy-mcp.html#operation-create-transaction-attribute-tool): tool - **Early access:** this tool is only available to teams in our early access program. - [list_activities](/advocacy-mcp.html#operation-list-activities-tool): tool - Lists the activities of the loyalty program of a team, which members earn points for, with the points each one awards, by rank, and whether it's on its storefront (on_storefront): active, shown on the dashboard, and neither a campaign's nor of a feature the team turned off. Its rules may still keep some members from seeing it. - [create_activity](/advocacy-mcp.html#operation-create-activity-tool): tool - **Early access:** this tool is only available to teams in our early access program. - [update_activity](/advocacy-mcp.html#operation-update-activity-tool): tool - **Early access:** this tool is only available to teams in our early access program. - [list_rewards](/advocacy-mcp.html#operation-list-rewards-tool): tool - Lists the rewards of the loyalty program of a team, which members redeem with their points, by rank. - [create_reward](/advocacy-mcp.html#operation-create-reward-tool): tool - **Early access:** this tool is only available to teams in our early access program. - [update_reward](/advocacy-mcp.html#operation-update-reward-tool): tool - **Early access:** this tool is only available to teams in our early access program. - [list_coupons](/advocacy-mcp.html#operation-list-coupons-tool): tool - **Early access:** this tool is only available to teams in our early access program. - [create_coupons](/advocacy-mcp.html#operation-create-coupons-tool): tool - **Early access:** this tool is only available to teams in our early access program. - [list_rules](/advocacy-mcp.html#operation-list-rules-tool): tool - **Early access:** this tool is only available to teams in our early access program. - [create_rule](/advocacy-mcp.html#operation-create-rule-tool): tool - **Early access:** this tool is only available to teams in our early access program. - [update_rule](/advocacy-mcp.html#operation-update-rule-tool): tool - **Early access:** this tool is only available to teams in our early access program. - [update_default_rule](/advocacy-mcp.html#operation-update-default-rule-tool): tool - **Early access:** this tool is only available to teams in our early access program. - [list_tiers](/advocacy-mcp.html#operation-list-tiers-tool): tool - **Early access:** this tool is only available to teams in our early access program. - [create_tier_settings](/advocacy-mcp.html#operation-create-tier-settings-tool): tool - **Early access:** this tool is only available to teams in our early access program. - [create_tier](/advocacy-mcp.html#operation-create-tier-tool): tool - **Early access:** this tool is only available to teams in our early access program. - [update_tier](/advocacy-mcp.html#operation-update-tier-tool): tool - **Early access:** this tool is only available to teams in our early access program. - [list_forms](/advocacy-mcp.html#operation-list-forms-tool): tool - **Early access:** this tool is only available to teams in our early access program.