---
title: Podium API Integration on Truto
slug: podium
category: Helpdesk
canonical: "https://truto.one/integrations/detail/podium/"
---

# Podium API Integration on Truto



**Category:** Helpdesk  
**Status:** Beta

## Unified APIs

### Unified User Directory API

- **Roles** — The Role object represents a role of a User.
- **Users** — The User object represents a User.

### Unified Ticketing API

- **Attachments** — Attachments are the files associated with a ticket or a comment.
- **Comments** — Comments represent the communication happening on a Ticket, both between a User and a Contact and the internal things like notes, private comments, etc. A Ticket can have one or more Comments.
- **Contacts** — Contact represent the external people you are in contact with. These could be customers, leads, etc. Contacts can be associated with an Account if the underlying product supports it.
- **Tickets** — Core resource which represents some work that needs to be carried out. Tickets are usually mapped to issues, tasks, work items, etc. depending on the underlying product.
- **Users** — Users represent the people using the underlying ticketing system. They are usually called agents, team members, admins, etc.

## MCP-ready AI tools

Truto exposes 85 tools for Podium that AI agents can call directly.

- **list_all_podium_users** — List all users in Podium. Returns archived, createdAt, email, firstName, lastName, locations, phone, role, uid, and updatedAt fields for each user. Only users belonging to accessible locations are returned.
- **get_single_podium_user_by_id** — Get a user in Podium. Requires id. Returns archived status, createdAt, email, firstName, lastName, assigned locations, phone, role, uid, and updatedAt fields in the response.
- **get_single_podium_organization_by_id** — Get an organization in Podium by id. Returns archived, businessName, createdAt, uid, and updatedAt fields in the response.
- **list_all_podium_locations** — List all locations in Podium. Returns addressDetails (city, country, state, postalCode), archive status, createdAt, displayName, name, organizationUid, phoneNumber, podiumPhoneNumber, uid, updatedAt for each location.
- **get_single_podium_location_by_id** — Get a specific location in Podium using id. Returns fields such as uid, displayName, addressDetails, phoneNumber, podiumPhoneNumber, organizationUid, archived, archivedAt, createdAt, and updatedAt in the response.
- **update_a_podium_location_by_id** — Update a location in Podium. Requires id. Returns addressDetails, displayName, name, phoneNumber, podiumPhoneNumber, archived, createdAt, updatedAt, archivedAt, organizationUid, and uid. Address must follow ISO convention.
- **create_a_podium_appointment** — Create an appointment in Podium. Requires contactName, contactPhoneNumber, datetime, and locationUid. Returns fields such as uid (appointment identifier), assignedUser, status, type, note, and createdAt in the response.
- **list_all_podium_campaigns** — List all automated campaigns in Podium. Returns createdAt, updatedAt, endedAt, startedAt, name, message, status, uid, organization, and locations for each campaign. Campaigns are sorted by updatedAt in descending order.
- **get_single_podium_campaign_by_id** — Get a specific campaign in Podium by id. Returns fields including uid, name, status, createdAt, updatedAt, startedAt, endedAt, message, organization, and locations.
- **create_a_podium_campaign** — Create a campaign in Podium. Requires locations, name, and status. Returns uid (campaign identifier), createdAt, startedAt, endedAt, updatedAt (timestamps), status, message, name, organization, and locations for the created campaign.
- **update_a_podium_campaign_by_id** — Update a campaign in Podium. Requires id. Returns campaign fields including uid, name, status, message, locations, organization, createdAt, updatedAt, startedAt, and endedAt.
- **delete_a_podium_campaign_by_id** — Delete a campaign in Podium. Requires id. Returns fields including uid, name, status, organization, message, locations, createdAt, updatedAt, startedAt, endedAt. The response contains all campaign fields.
- **list_all_podium_contact_attributes** — List contact attributes in Podium tied to the ownerResource on the token. Returns uid, label, dataType, isEncrypted, createdAt, updatedAt, and ownerResource for each attribute.
- **get_single_podium_contact_attribute_by_id** — Get a contact attribute in Podium by id. Returns fields: uid (Podium unique identifier), label (attribute label), dataType (attribute value type), isEncrypted (encryption status), ownerResource (resource owner info), createdAt, and updatedAt.
- **create_a_podium_contact_attribute** — Create a contact attribute in Podium. Requires dataType, label, and ownerResourceType. Returns uid, label, dataType, isEncrypted, ownerResource, createdAt, and updatedAt fields in the response.
- **update_a_podium_contact_attribute_by_id** — Update a contact attribute in Podium using id. Returns createdAt, dataType, isEncrypted, label, ownerResource, uid, and updatedAt fields in the response. Requires id.
- **delete_a_podium_contact_attribute_by_id** — Delete a contact attribute in Podium by id. Returns uid, label, dataType, isEncrypted, ownerResource, createdAt, and updatedAt fields in the response.
- **list_all_podium_contact_tags** — List all contact-tags in Podium. Returns uid, label, description, createdAt, updatedAt, and organization for each tag.
- **get_single_podium_contact_tag_by_id** — Get a contact tag in Podium for an organization using id. Returns uid, label, description, organization.uid, createdAt, and updatedAt fields in the response.
- **create_a_podium_contact_tag** — Create a contact tag in Podium. Requires label and description. Returns uid (tag identifier), label, description, organization reference, createdAt, and updatedAt for the tag in the response.
- **update_a_podium_contact_tag_by_id** — Update a contact tag in Podium. Requires id. Returns uid, label, description, createdAt, updatedAt, and organization fields in the response.
- **list_all_podium_contacts** — List all contacts in Podium. Returns each contact's uid, name, address, channels, emails, phoneNumbers, tags, attributes, conversations, locations, organization, createdAt, and updatedAt fields in the response.
- **create_a_podium_contact** — Create a contact. If a contact with the same phone number, email, or conversation uid is found it will update the contact. Requires locations and name. Returns the identifier of the created contact in the response.
- **get_single_podium_contact_by_id** — Get a contact in Podium using id, which can be a conversation uid, an email address, or a phone number. Returns fields such as uid, name, address, emails, phoneNumbers, channels, attributes, tags, conversations, locations, organization, createdAt, and updatedAt in the response.
- **update_a_podium_contact_by_id** — Update a contact in Podium using id (conversation uid, email, or phone number). Returns identifier of the updated contact in the response.
- **delete_a_podium_contact_by_id** — Delete a contact in Podium using id (conversation uid, email, or phone number). Returns identifier field to confirm deletion.
- **podium_contacts_opt_out** — Opt out a contact from receiving campaign messages in Podium. Requires the channel.identifier and channel.type parameters. Returns contact fields such as uid, name, channels, phoneNumbers, emails, attributes, tags, address, conversations, createdAt, updatedAt, organization, and locations. Application must be whitelisted.
- **podium_contacts_remove_attribute** — Remove an attribute from a contact in Podium. Requires contact_id and uid. Returns identifier of the contact whose attribute was removed.
- **podium_contacts_update_contact_attribute** — Update a contact attribute in Podium using contact_id and uid. Returns identifier indicating the contact whose attribute was updated.
- **podium_contacts_add_attribute** — Add an existing attribute to a contact in Podium. Requires contact_id and uid. Returns identifier to retrieve the contact in the response.
- **podium_contacts_remove_tag** — Remove an existing tag from an existing contact in Podium. Requires contact_id and uid. Returns identifier field representing the contact's identifier in the response.
- **podium_contacts_add_tag** — Add an existing tag to an existing contact in Podium. Requires contact_id and uid. Returns identifier indicating the contact the tag was added to.
- **list_all_podium_conversations** — List all conversations in Podium. Returns assignedUserUid, channel (identifier and type), closed status, contactName, createdAt, lastItemAt, locationUid, uid, and updatedAt for each conversation. If cursor is used, other parameters are ignored.
- **get_single_podium_conversation_by_id** — Get a conversation in Podium by id. Returns assignedUserUid, channel details, closed status, contactName, createdAt, lastItemAt, locationUid, uid, and updatedAt fields in the response.
- **update_a_podium_conversation_by_id** — Update a conversation in Podium using id. Returns assignedUserUid, channel, closed, contactName, createdAt, lastItemAt, locationUid, uid, and updatedAt fields in the response. id is required.
- **podium_conversations_writeback_lead** — Writeback lead to the connected CRM in Podium. Requires conversation_id. Returns conversation (with uid) in the response. No other identifiers are assigned by Podium.
- **podium_conversations_create_note** — Create a note for a specific conversation in Podium. Requires conversation_id. Returns uid of the note, body, senderName, createdAt, updatedAt, and related organization, location, conversation objects.
- **list_all_podium_conversation_assignees** — Get conversation assignees in Podium. Requires conversation_id. Returns assignedUserUid, assigneeType, assigneeUid, and assignees (list of assignee user uids) in the response.
- **update_a_podium_conversation_assignee_by_id** — Update conversation-assignees in Podium for a specific conversation using conversation_id. Returns assignedUserUid, assigneeType, assigneeUid, and assignees for the updated conversation.
- **delete_a_podium_scim_user_by_id** — Delete a SCIM user resource in Podium. Requires id (provided as email). A successful response returns no content.
- **update_a_podium_scim_user_by_id** — Update a SCIM user resource in Podium to be deactivated. Requires id as the user's email. Returns no content in the response.
- **list_all_podium_conversation_leads** — Get a conversation lead ID in Podium. Requires location_uid, organization_uid, and conversation_id. Returns leadId and conversation.uid associated with the conversation.
- **list_all_podium_webhooks** — List webhooks tied to the authorized user in Podium. Returns uid (webhook unique identifier), eventTypes (events webhook listens to), url (webhook target URL), disabled (status), and createdAt, updatedAt timestamps.
- **get_single_podium_webhook_by_id** — Get a webhook in Podium. Requires id. Returns createdAt, disabled, eventTypes, locationUid, organizationUid, secret, uid, updatedAt, url fields in the response.
- **create_a_podium_webhook** — Create a webhook in Podium. Requires eventTypes and url. One of locationUid or organizationUid is required (if both provided, organizationUid is used). Returns uid, eventTypes, url, createdAt, updatedAt, disabled, locationUid, organizationUid, and secret.
- **update_a_podium_webhook_by_id** — Update a webhook in Podium by id. locationUid and organizationUid cannot be updated. Returns uid, url, eventTypes, disabled, secret, createdAt, updatedAt, locationUid, and organizationUid fields in the response.
- **delete_a_podium_webhook_by_id** — Delete a webhook in Podium. Requires id. Returns uid, url, eventTypes, disabled, secret, createdAt, updatedAt, organizationUid, and locationUid fields for the deleted webhook in the response.
- **list_all_podium_feedback_surveys** — List all feedback surveys in Podium. Surveys are sorted by createdAt descending. Returns fields such as uid, createdAt, updatedAt, score, adjustedScore, customerName, location, attributions, channel, currentStep, and messages in the response.
- **list_all_podium_conversation_messages** — Retrieve messages from a conversation in Podium. Requires conversation_id. Returns fields such as uid, body, createdAt, contactName, senderUid, items with attachments and metadata like deliveryStatus.
- **get_single_podium_conversation_message_by_id** — Retrieve a specific message in Podium using conversation_id and id. Returns message details including body, createdAt, senderUid, items, location, and status fields.
- **create_a_podium_conversation_message** — Send a message with an attachment in Podium. Returns message fields including uid, body, items (attachments), createdAt, senderUid, and conversation. Supported attachment file types include images (.png, .jpg, .gif), videos (.mp4, .mov, .avi), documents (.pdf, .csv, .docx), and audio files (.mpeg, .wav, .ogg). Maximum file size is 30 MB. The rate limit is 10 requests per minute. Requires valid body, channel, and locationUid parameters in the request.
- **podium_conversation_messages_import** — Import a message into a conversation in Podium. Requires body, channel, contactName, direction, locationUid, and publishedAt. Returns message fields such as uid, body, items, createdAt, and senderUid in the response. This does not send a message, just imports it into a conversation.
- **podium_conversation_messages_send** — Send a message in Podium. Requires body, channel, and locationUid. Returns fields including uid (message id), body (message text), createdAt (message creation timestamp), items (associated attachments), and failureReason (if sending failed). A message can only be sent on behalf of a user if they have the necessary permissions to send messages in conversations assigned to them, conversations assigned to others, and unassigned conversations.
- **list_all_podium_templates** — List all templates in Podium. Returns fields such as uid, title, subject, type, accessLevel, createdAt, updatedAt, and templateItems for each template in the response. Requires read_templates scope.
- **create_a_podium_template** — Create a message template in Podium. Returns template fields including uid, title, text, accessLevel, subject, type, createdAt, updatedAt, and organization, location, or user references. Required parameters: text, title, type, accessLevel.
- **delete_a_podium_template_by_id** — Delete a template in Podium. Requires id. Returns the deleted template's details, including uid, title, text, subject, accessLevel, organization, location, user, templateItems, createdAt, updatedAt, deletedAt, isFavorite, nonDeletable, type, and variables.
- **update_a_podium_template_by_id** — Update a message template in Podium. Requires id. Returns accessLevel, attachmentUrl, createdAt, deletedAt, isFavorite, lastUsedAt, location, nonDeletable, organization, subject, templateItems, text, title, type, uid, updatedAt, user, variables.
- **list_all_podium_products** — List all products in Podium. Returns uid, name, description, price, images, xid, archivedAt, insertedAt, and updatedAt for each product. Requires read_products scope.
- **get_single_podium_product_by_id** — Get a product in Podium using id. Returns name, description, price, images list (with uid, url, isPrimary), archivedAt, insertedAt, updatedAt, xid, and product uid fields in the response. Requires id.
- **podium_products_delete_images** — Delete images from a specific product in Podium. Requires id of the product, and the request must include locationUid and uids. Returns for each image: isPrimary, productUid, uid, and url.
- **podium_products_upload_images** — Upload images to a specific product in Podium using product_id, images, and locationUid. Returns identifier for the created async product task and resource URL in the response.
- **list_all_podium_invoices** — List all invoices in Podium. Returns fields such as uid, amount, status, createdAt, paidAt, lineItems, allowedPaymentMethods, customerName, payments, and location for each invoice.
- **get_single_podium_invoice_by_id** — Get an invoice in Podium. Requires id and location_id. Returns allowedPaymentMethods, amount, canceledAt, channel, conversationUid, createdAt, currencyRef, customerName, invoiceNumber, lineItems, location, payments, status, tipAmount, and uid in the response.
- **create_a_podium_invoice** — Create an invoice in Podium. Providing the readerUid property creates a card_present invoice; if omitted, a card_not_present invoice is created. Requires channelIdentifier, customerName, invoiceNumber, lineItems, and locationUid. Returns allowedPaymentMethods, amount, channel, createdAt, currencyRef, customerName, invoiceNumber, invoiceServiceChargeItems, lineItems, location, paidAt, payments, readerUid, requester, status, tipAmount, uid, and key payment and refund details.
- **podium_invoices_cancel** — Cancel an invoice in Podium. Requires invoice_id. Returns invoice fields such as allowedPaymentMethods, amount, canceledAt, canceledNote, channel, createdAt, customerName, status, uid, and more.
- **podium_invoices_refund** — Refund an invoice in Podium. Requires invoice_id. Returns invoice fields such as uid, amount, status, payments, refunds, and more in the response. The invoice must currently have a status of paid. If an invoice has a status of created, it cannot be refunded, but can be canceled. An invoice can have multiple refunds. The total refunded amount cannot exceed the invoice's amount.
- **get_single_podium_payment_by_id** — Get a payment in Podium by id. Returns bankAccountLast4, cardBrand, createdAt, fee, refunds, settledAt, status, uid, and other payment details. Requires id.
- **get_single_podium_reader_by_id** — Get a specific card reader in Podium by id. Returns uid, label, locationUid, status, createdAt, and updatedAt fields in the response. Requires id.
- **get_single_podium_refund_by_id** — Get refund in Podium using id and location_id. Returns amount, cardBrand, cardLast4, createdAt, location.uid, notes, reason, settledAt, status, and uid in the response.
- **create_a_podium_refund** — Create a refund in Podium. Requires amount, channelIdentifier, customerName, locationUid, readerUid, and reason. Returns uid, amount, status, cardBrand, cardLast4, reason, createdAt, settledAt, location, and notes. Only works with Podium Payment Card Reader. Action creates an Unlinked Refund and requires sufficient account balance; operation may fail if balance is insufficient.
- **list_all_podium_reviews** — List all reviews in Podium. Returns attributions, author, createdAt, isRecommendation, locations, needsResponse, responses, review details, uid, and updatedAt fields for each review.
- **get_single_podium_review_by_id** — Get a review in Podium by id. Returns uid, author, review body, rating, siteName, attributions, createdAt, locations, responses, isRecommendation, needsResponse, and updatedAt fields.
- **list_all_podium_review_invites** — List all review invites in Podium. Returns attributions, channel, conversationItemUid, createdAt, customerName, deliveryStatus, languages, linkClicked, linkClickedAt, location, sender, shortUrl, test, uid, updatedAt, and url fields in the response.
- **get_single_podium_review_invite_by_id** — Get a review invite in Podium by id. Returns uid, createdAt, deliveryStatus, channel, customerName, linkClicked, attributions, location, sender, shortUrl, url, and updatedAt fields in the response. Requires id.
- **create_a_podium_review_invite** — Create a review invite link in Podium. Returns uid, shortUrl, url, customerName, channel, deliveryStatus, createdAt, and other invite details. Do not send the same review invitation link to multiple contacts. Doing so can interfere with reporting in Podium, and may cause the invitation link to stop working. Generate a new review invitation link every time you send one to a contact.
- **list_all_podium_sites_summary** — Get summary of reviews for connected sites in Podium. Returns siteName, averageRating, and reviewCount for each site. For locationUids, add each as locationUids[] in URL. Returns these fields in the response.
- **list_all_podium_review_summary** — Get a summary of reviews for each location in Podium. Returns averageRating, locationUid, and reviewCount fields for each location. Requires access to all visible locations.
- **list_all_podium_review_responses** — List responses of a specific review in Podium. Requires review_id. Returns body, isDeleted, likeCount, publishDate, siteAuthorName, source, and uid fields for each response.
- **create_a_podium_review_response** — Create a response for a given review in Podium. Requires review_id. Returns body, isDeleted, likeCount, publishDate, siteAuthorName, source, and uid fields for the created review response.
- **update_a_podium_review_response_by_id** — Update a review response in Podium. Requires review_id and id. Returns body, isDeleted, likeCount, publishDate, siteAuthorName, source, and uid fields in the response.
- **create_a_podium_review_attribution** — Attribute a user to a review in Podium. Requires review_id, locationUid, and userUid. Returns createdAt, updatedAt, isDeleted, siteReviewId, uid, user, editedByUser, and reviewInvite fields in the response.
- **delete_a_podium_review_attribution_by_id** — Remove a user attribution from a review by id in Podium. Requires userUid. Returns createdAt, editedByUser, isDeleted, reviewInvite, siteReviewId, uid, updatedAt, and user fields in the response.
- **list_all_podium_campaign_interactions** — List campaign interactions in Podium. Returns uid, interactionType, createdAt, updatedAt, and resource references (campaign, contact, conversation, location) for each interaction. If cursor is used, all other parameters are ignored.
- **create_a_podium_campaign_message** — Create a message for a specific campaign in Podium. Requires id and channelIdentifier. Returns message fields such as uid, body, items, createdAt, failureReason, location, and senderUid.
- **create_a_podium_data_feed_event** — Process an event through a data feed in Podium. Requires data_feed_id. Returns dataFeedUid and uid for each processed data feed event in the response.

## How it works

1. **Link your customer's Podium account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach Podium.** The Proxy API is a 1-to-1 mapping of the Podium API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **Automate review generation after service completion** — Field service, automotive, and healthcare SaaS platforms can trigger Podium review invites automatically when a job, appointment, or ticket is closed — helping their end users build Google reviews without any manual effort from frontline staff.
- **Use SMS as a support channel without building telecom infrastructure** — Helpdesk and ticketing platforms can map Podium conversations and messages into Truto's Unified Ticketing API, letting their users receive and reply to customer texts as standard tickets and comments inside the SaaS product.
- **Sync contacts bidirectionally with a system of record** — CRM and practice management platforms can keep their contact database in sync with Podium so that staff always message the right person with up-to-date metadata, tags, and custom attributes — eliminating duplicate outreach and stale data.
- **Embed text-to-pay invoicing into vertical workflows** — Field service, home services, and retail SaaS products can generate Podium invoices directly from their billing or POS workflows, enabling end users to collect payments via text without leaving the primary tool.
- **Capture and route inbound leads from Podium webchat into a CRM** — Automotive DMS and sales platforms can listen for new Podium conversations and write leads back into their CRM using conversation writeback and webhook subscriptions, ensuring zero leads are lost from website chat.

## What you can build

- **Automated post-service review invite trigger** — When an event fires in your product (job complete, ticket closed), automatically call Podium's review invite API to text the customer a Google review link.
- **Two-way SMS ticketing via Unified Ticketing API** — Ingest Podium conversations as tickets and messages as comments through Truto's Unified Ticketing API, and send agent replies back as Podium conversation messages.
- **Real-time contact and tag sync engine** — Create, update, and delete Podium contacts, custom attributes, and tags from your product to maintain a single source of truth across both systems.
- **Multi-location review analytics dashboard** — Pull review summaries, site summaries, and individual reviews across all Podium locations to surface reputation metrics and response management inside your product.
- **Text-to-pay invoice generation from billing workflows** — Create Podium invoices programmatically from your product's billing engine so end users can send payment links via SMS and track invoice status including cancellations and refunds.
- **Webhook-driven lead capture pipeline** — Subscribe to Podium events via webhooks and use conversation lead listing and writeback endpoints to funnel webchat leads into your CRM in real time.

## FAQs

### What authentication method does the Podium integration use through Truto?

Truto handles OAuth-based authentication for Podium. Your end users connect their Podium accounts through Truto's embedded auth flow — you never need to manage tokens, refreshes, or API keys yourself.

### Which Truto Unified APIs are available for Podium?

Podium is mapped to the Unified Ticketing API (supporting Tickets, Comments, Contacts, Users, and Attachments resources) and the Unified User Directory API (supporting Users and Roles). You can also access all Podium-native endpoints directly for capabilities like reviews, invoices, campaigns, and webhooks.

### Can I manage Podium webhooks through Truto to get real-time event notifications?

Yes. You can create, list, update, and delete Podium webhooks through Truto, allowing you to subscribe to real-time events like incoming messages or paid invoices without polling.

### Does the integration support custom contact attributes and tags?

Yes. You can list, create, update, and delete custom contact attributes, as well as add or remove attributes and tags on individual contacts. This lets you sync arbitrary metadata between your product and Podium.

### What operations are supported for Podium conversations and messages?

You can list and retrieve conversations, update conversation status, create notes on conversations, write back leads, manage assignees, and list or create conversation messages. You can also import historical messages and send messages through dedicated endpoints.

### Does Truto handle pagination and rate limits for Podium's API?

Yes. Truto abstracts away pagination across all list endpoints and manages rate limiting so your integration doesn't need to implement retries or cursor-tracking logic against Podium's API directly.
