Macha

What Can an AI Support Agent Do in Smile.io? Points Balances, VIP Tiers and Missing Points (2026)

Abbas, Customer Support & AI, Macha

Written by

Ankeet Guha, Co-founder & CTO, Macha

Reviewed by

Published September 28, 2026

Smile.io's REST API lets an AI support agent find a shopper by email and read their points balance, VIP tier, progress to the next tier and referral link in one call, then add points or redeem a reward with two documented write endpoints. API keys exist only on Smile's Plus plan ($999 a month, billed annually) and Enterprise, so a store on Free, Essential, Standard or Growth can't give any outside agent that access today. This page maps each loyalty ticket to the endpoint that answers it, shows what Gorgias's own Smile integration already does, and sets out what an agent still can't do, such as moving a customer's VIP tier.

Key takeaways

  • Smile.io's API lets an AI agent look up a customer by email and read points balance, VIP tier and referral URL, then add points or redeem a points product.
  • Smile.io API keys are available only on the Plus plan, listed at $999 a month billed annually, and on Enterprise; Free, Essential, Standard and Growth have no API access.
  • In our Macha Demo test on 28 September 2026, the agent guessed 10 points per $1 and attempted a 205-point goodwill write for a $20.50 subtotal, where our instruction's 5-point rule gives 102.
  • Smile.io's API has no endpoint for changing a VIP tier; Smile's help center moves tiers only in Smile Admin, and only upward.
  • Gorgias shows Smile.io points, VIP tier and referral URL beside tickets on Smile's Essential plan and above, but that integration displays data rather than changing balances.
What Can an AI Support Agent Do in Smile.io? Points Balances, VIP Tiers and Missing Points (2026)

Which Smile.io support jobs can an AI agent do through the API?

We read every support-relevant endpoint in Smile's REST API reference on 28 September 2026. The base URL is https://api.smile.io/v1 and every call carries Authorization: Bearer api_..., a key the merchant creates with the scopes it needs.

Support jobEndpointRead or writeScope the key needsWho can do it today
"How many points do I have?"GET /customers?email=...&include=vip_statusReadcustomer:readGorgias sidebar (display), a human in Smile Admin, an AI agent with a custom API tool
"What tier am I in, and how far to the next one?"same call, vip_status objectReadcustomer:readGorgias sidebar, Smile Admin, an AI agent
"Send me my referral link"same call, referral_url fieldReadcustomer:readGorgias sidebar and macros, an AI agent
"Where did my points go?" (history)GET /points_transactions?customer_id=...Readpoints_transaction:readSmile Admin, an AI agent
"I redeemed points but lost the code"GET /reward_fulfillments?customer_id=...Readreward_fulfillment:readSmile Admin, an AI agent
"My order didn't earn points" (goodwill fix)POST /points_transactionsWritepoints_transaction:writeSmile Admin ("Adjust balance"), an AI agent with a Write tool
"Turn my points into a discount"POST /points_products/{id}/purchaseWritepoints_purchase:writeThe shopper on-site, an AI agent with a Write tool
"Move me up to Gold"nonen/an/aA human in Smile Admin only
"Create my rewards account"none with an API keyn/an/aSignup on the store; Smile's OAuth apps only

The customer lookup returns everything a "where are my points" reply needs in one response, and the points transaction endpoint is the only documented way for anything outside Smile Admin to fix a balance.

Smile.io API reference for POST /points_transactions, showing the points_transaction:write scope and the negative-balance rule
Smile.io API reference for POST /points_transactions, showing the points_transaction:write scope and the negative-balance rule

What do customers ask about Smile.io points?

Loyalty tickets are small and repetitive. A shopper wants their balance before a sale, asks why an order didn't earn points, forgets which tier they're in, or can't find the discount code they redeemed last month. Promotions add to them: Smile's pricing page lists "2x points weekends" as a Standard-plan feature, and a double-points weekend gives every shopper a reason to check that the extra points arrived.

Each of those questions has a stored answer. Nothing in the reply needs judgment except the goodwill fix, where someone decides whether a missing order deserves points. So the setup splits the same way: read tools the agent can use freely, and one write tool with a rule.

How does the lookup work, from email to balance?

The help desk gives the agent the requester's email. The agent calls GET /[email protected]&include=vip_status and gets back a customer with id, state (candidate, member or disabled), points_balance, referral_url and a vip_status object. That object carries vip_tier_id, vip_tier_expires_at, progress_value, next_vip_tier_id, delta_to_next_vip_tier and delta_to_retain_vip_tier. The tier id is a number, so a second call to GET /vip_tiers turns it into a name like "Gold".

Smile's docs flag one trap in the list customers reference: Smile "does not enforce uniqueness on email, so multiple customer records may be returned." An agent that reads the first record and quotes its balance can be wrong. The instruction further down tells it to stop and hand off when more than one record comes back.

The state field matters too. A candidate is a shopper Smile knows about who hasn't joined the program, which usually explains a zero balance better than any missing-points theory.

Why do customers say their points are missing, and what can the agent check?

Smile's troubleshooting article lists the causes, and most can be checked from data the agent can read:

  • Guest checkout. If the program is set to "Only customers who have a store account", guests don't earn until they create an account (Shopify only). A candidate state or no customer record points here.
  • Order status. Points are awarded when the order reaches the status set in order settings; on Shopify, "Paid" is the recommended setting. An authorized-but-unpaid order hasn't earned yet. Macha's built-in Shopify connector can read the order's financial status with Get Order, so the agent can see this without a Smile call.
  • Refunds. Smile's recommended settings remove points for Refunded and Partially Paid orders, so a refunded order legitimately takes points back. The transaction history shows the deduction.
  • Items added after the order. Smile "does not review or recalculate the points awarded for that order", and the fix it gives is a manual balance adjustment.
  • Settings changes. "Changes to your order settings only apply to new orders", so a store that changed its rules last week won't see old orders re-scored.

The agent's job is to read the customer, the transaction history and the Shopify order, match the case to one of those causes, and either explain it or apply the fix your policy allows.

What does Gorgias's Smile integration already do?

On Gorgias, most of the read side already exists. Smile's Gorgias integration overview says it will "display loyalty data (points, VIP tier, referral URL) alongside support tickets", lets agents "use Smile variables in macros" and can "trigger Gorgias rules based on a customer's points balance or VIP tier." It's built by Gorgias, it works on Smile's Essential plan and above, and it counts toward the plan's integration limit (one integration on Essential, two on Standard). Gorgias's own doc adds that you can't connect more than one Smile account.

Neither doc describes adjusting points or redeeming a reward from the ticket. A Gorgias macro can quote the balance; someone still opens Smile Admin to fix one. Smile lists two other support-tool integrations, Re:amaze ("display loyalty data alongside support conversations") and HubSpot (syncing points balance and VIP tier into the CRM). Smile's integrations list on 28 September 2026 had no Zendesk, Freshdesk, Intercom or Front entry, so teams on those desks get no Smile data beside the ticket without building it. Our Gorgias integrations roundup covers the wider Gorgias ecosystem.

Why is API access on the Plus plan?

Smile's pricing page lists "API access" under Plus and "Custom API rate limits" under Enterprise, and none of the four lower plans (Free, Essential, Standard at $79 and Growth at $199 a month) has either. Smile's merchant credentials guide says it plainly: "Merchant credentials are only available on the Plus or Enterprise plan."

Smile's incentive shows in who gets which door. Merchant API keys are for one-off custom work, and gating them at Plus turns API access into an upsell for brands big enough to employ a developer. Smile's partner path runs the other way: an OAuth app works on "any paid plan", can create loyalty accounts through the API and can subscribe to webhooks, none of which a merchant key can do, according to Smile's OAuth migration guide. So Smile routes most stores to listed apps like the Gorgias integration and reserves direct keys for the accounts large enough to pay for custom builds. For a support team below Plus, that means the Gorgias sidebar or a human in Smile Admin, not an API-driven agent.

Smile.io pricing, 28 Sept 2026: Growth $199 a month, Plus $999 a month (annual) with API access, Enterprise custom limits
Smile.io pricing, 28 Sept 2026: Growth $199 a month, Plus $999 a month (annual) with API access, Enterprise custom limits

Which Smile.io actions still need a person?

  • VIP tier changes. There's no tier-change endpoint in the API reference. Smile's help article moves tiers in Smile Admin under Customers, VIP card, Change tier, and "It is not possible to manually downgrade a customer to a lower tier."
  • Goodwill above your threshold. POST /points_transactions will add any amount the key allows. Decide the cap in the agent's instructions (for example, only the points the missing order would have earned, and never more than one order's worth) and route anything bigger to a person.
  • Deductions. A negative points_change removes points, and Smile rejects a transaction that "would result in a negative points balance." Taking points away is a customer-relations call; keep it with a human.
  • Account creation. A merchant API key can't create a loyalty account, so "sign me up" goes back to the store's signup flow.

How is it set up with Macha?

Smile.io has no built-in Macha connector. It connects through a custom API tool that Macha's team sets up during onboarding, using Smile's Bearer auth with an api_ key the merchant generates under Settings, Developer tools in Smile Admin. Custom tools are included on every plan. The key's value is shown once when it's created, so the merchant pastes it straight into the tool's Bearer Token field, where it's encrypted at rest and never shown to the model.

Macha's team builds the read tools first: customer by email, points transactions by customer id, reward fulfillments, VIP tiers. Then the two writes, marked Write: create points transaction and purchase points product. The custom tools docs describe the Read and Write types and say a Write tool asks for confirmation in chat; on a triggered run it runs directly when the agent's instructions say to. In our own chat test, the built-in Zendesk writes paused for confirmation but our custom Write tool went straight to Smile (the run is below). Either way, the goodwill cap has to live in the instructions and the key's scopes, not in someone's click.

Macha custom tool "Smile.io: Add points (goodwill)" set to Write, POST to points_transactions with four body parameters
Macha custom tool "Smile.io: Add points (goodwill)" set to Write, POST to points_transactions with four body parameters

The key only needs the scopes those tools use (customer:read, points_transaction:read, reward_fulfillment:read, vip_tier:read, plus points_transaction:write and points_purchase:write if you want the writes), so a key made for the agent can't touch earning rules or program settings.

The rest of the ticket runs on built-in pieces. Macha's Shopify connector reads the order (Get Order, Lookup Customer), and the help desk connector posts the reply or internal note on Zendesk, Freshdesk, Gorgias, Front, HubSpot or Intercom. Our custom API tools guide walks through the tool form field by field.

We didn't have a Smile Plus account, so we built both tools on our Macha Demo org with a dummy api_ key and ran the tool's Test button against Smile's real endpoint. Smile answered HTTP 401, which is what its errors page returns when credentials "are missing from the request or are incorrect": the URL and Bearer header reach Smile, and a real Plus key is the only missing piece. We didn't read live customer data, so the response fields above come from Smile's reference. The next section shows what the agent did with those tools on a made-up ticket.

Macha custom tool "Smile.io: Find customer by email" with Bearer auth, tested with a dummy key: Smile's API returned HTTP 401
Macha custom tool "Smile.io: Find customer by email" with Bearer auth, tested with a dummy key: Smile's API returned HTTP 401

What happened when we ran a Smile.io agent on a made-up ticket?

We built an inactive agent, "T4B-Loyalty points helper", on our Macha Demo org on 28 September 2026 and gave it this instruction, written for acting, for a Shopify store whose Smile program earns 5 points per $1 on "Paid" orders. The quoted names are the tool labels on our org; the "T4B-" prefix marks the tool we built for this series.

When a customer asks about loyalty points, rewards or VIP tier:
1. Look up the requester's email with "Smile.io: Find customer by email".
   - The lookup fails (401, 403, 429 or no response): add an internal note with the error
     and hand off. Never guess a balance. Stop.
   - No record: say they aren't in the rewards program yet and link the signup page. Stop.
   - More than one record: add an internal note "Duplicate Smile records for this email"
     and hand off. Stop.
   - state = candidate: explain they need to join the program (create a store account)
     to earn. Stop.
2. Balance, tier or referral questions: answer from points_balance, vip_status
   (tier and delta_to_next_vip_tier) and referral_url. Never round points.
3. Missing points for an order:
   a. Get the order with Shopify Get Order. If financial status is not paid, explain points
      arrive once payment completes. Stop.
   b. List the customer's points transactions with "T4B-Smile.io: List points transactions".
      If one is for that order, quote it and its date. Stop.
   c. If the order is paid and has no transaction: add the points it should have earned
      (5 points per $1 of subtotal) with "Smile.io: Add points (goodwill)", description
      "Points for order #<number>", internal_note "Added by AI agent, ticket <id>".
      Maximum 500 points. Above 500, hand off.
4. Never change VIP tiers, remove points or promise points not yet earned. Hand those off.

The 500-point cap and the 5-point rate are placeholders; set them from your own program. The agent also had Shopify Get Order and Search Orders and Zendesk Get Ticket and Add Internal Note. On our d3v-macha Zendesk sandbox we created ticket #1118 from a made-up "Maya Test" ([email protected]): order #1097 was paid on 14 September and her rewards balance didn't move. Order #1097 is a real order on our Shopify test store, placed by a different customer, so Maya's email doesn't match it. Sandbox tickets don't trigger production agents, so we pasted the ticket into the agent's Try it chat.

Run 1 in Try it chat: the agent checked ticket #1118 and paid order #1097, hit a Smile authorization error, added an internal note and handed off
Run 1 in Try it chat: the agent checked ticket #1118 and paid order #1097, hit a Smile authorization error, added an internal note and handed off

The first run took 5.8 seconds and 9 tool calls. Get Order returned the order as paid, with a $20.50 subtotal and a $24.20 total. The Smile lookup returned HTTP 401 on the dummy key, and the agent followed step 1: no guessed balance, an internal note, a handoff. It also did two things the instruction didn't ask for. It noticed the order belonged to a different email than the requester's and searched Shopify for Maya (no customer found), and it retried Smile with the order's email (401 again). Each Zendesk write paused for confirmation in chat. We confirmed the internal note, since it went to our own sandbox ticket, and left the other two unconfirmed: a public reply asking Maya which email she'd used, and a status change. Neither was sent.

Tools panel for run 1: Get Order succeeded, "Smile.io: Find customer by email" failed with HTTP 401, Get Ticket read #1118
Tools panel for run 1: Get Order succeeded, "Smile.io: Find customer by email" failed with HTTP 401, Get Ticket read #1118
Ticket #1118 on our d3v-macha sandbox with the agent's internal note, which says a reply was sent though none was (author name masked)
Ticket #1118 on our d3v-macha sandbox with the agent's internal note, which says a reply was sent though none was (author name masked)

Read that note closely. It says "Sent customer a reply asking them to confirm the email", and no reply went out, because we never confirmed it. The note records what the agent meant to do. Whoever picks up the handoff should check the public thread, not only the note.

Then we tested the write. In a new chat we gave the agent a made-up Smile customer id (412083776), said a teammate had confirmed there was no points transaction for #1097, and asked it to apply the goodwill "under step 3c". That run took 1 minute 31 seconds and 25 steps. The agent read the order, then searched the knowledge base about ten times for an earning rate. It treated "step 3c" as the name of a document, which is our prompt's fault, found nothing, and settled on 10 points per $1: 205 points. The instruction's rule gives 102 for a $20.50 subtotal (5 x 20.50 = 102.5, rounded down). It then called "Smile.io: Add points (goodwill)" with 205 points. No confirmation card appeared for that custom Write tool, and the call reached Smile, which answered 401 "Invalid credentials." with its own request id. Macha's tools panel labels the payload "not sent" and "no change made", which is true of the result: Smile refused it. With a real Plus key, 205 points would have landed, under the 500 cap and at double the intended rate.

Run 3 tools panel: "Smile.io: Add points (goodwill)" with 205 points for order #1097, failed with HTTP 401 on our dummy key, no change made
Run 3 tools panel: "Smile.io: Add points (goodwill)" with 205 points for order #1097, failed with HTTP 401 on our dummy key, no change made

Three changes follow from the run. Put a worked example in the instruction ("a $20.50 subtotal earns 102 points") so the rate isn't something the agent can go looking for. Set the cap at the largest amount you'd accept without review; 500 points didn't stop a wrong 205. And keep points_transaction:write off the key until you've read a week of the agent's internal notes, because the read side already answers most loyalty tickets.

What goes wrong?

  • 429s at peak. Every token gets 10 requests per second, per Smile's rate limits page. One ticket uses three or four calls, so a batch of triggered runs during a double-points weekend can hit the limit. Enterprise buys custom limits.
  • Duplicate emails. Covered above: the list endpoint can return two customers.
  • Deprecated field. The top-level vip_tier_id on the customer object is deprecated in favor of vip_status.vip_tier_id. Tools built from older examples read the wrong field.
  • Expired tier dates. vip_tier_expires_at is null on all-time programs and set on calendar-year ones. An agent that says "your tier expires" must check which kind the store runs.
  • Wrong scope. A key missing a scope returns 403, and Smile doesn't let you add scopes to an existing key; the merchant makes a new one.
  • A 422 on redeem. Smile returns 422 for "trying to redeem more points than the customer has." The agent should read the balance first rather than learn it from the error.

Where Macha fits

Macha fits teams on Smile Plus or Enterprise, running Zendesk, Freshdesk, Gorgias, Front, HubSpot or Intercom, who want loyalty tickets answered and fixed inside the ticket: the balance and tier read, the Shopify order check and the capped goodwill write in one run. On Gorgias, it adds the write side the sidebar integration doesn't document. On the other desks, which Smile's integrations list doesn't cover, it brings Smile data to the ticket for the first time. It's the wrong fit if you're below Plus: there's no merchant key to connect, and the options are the Gorgias integration or a person in Smile Admin. Macha is priced from $299/month for 750 tickets (see pricing), per ticket rather than per action, so the extra Smile calls in a missing-points ticket don't change the charge. Our loyalty apps comparison maps the other loyalty apps, and the Yotpo page covers Yotpo's loyalty API, which needs two headers instead of one. The whole Shopify app stack is in which Shopify apps an AI agent can work with, and help desk options for Shopify stores are in AI customer service for Shopify.

Frequently asked questions

Does Smile.io have a public API? Yes. Smile.io has a REST API at https://api.smile.io/v1 with Bearer authentication. Merchant API keys are available only on the Plus and Enterprise plans; partners building listed apps use OAuth, which works on any paid plan.

Can an AI agent check a customer's Smile.io points balance? Yes, with a Plus or Enterprise API key. GET /customers filtered by email returns points_balance, the VIP status object and the referral URL in one response.

Can an AI agent add missing points in Smile.io? Yes. POST /points_transactions adds or removes points with a customer-visible description and a merchant-only internal note, and Smile rejects any transaction that would leave a negative balance. Cap the amount in the agent's instructions.

Can the Smile.io API change a customer's VIP tier? No. The API reference has no tier-change endpoint. Smile Admin changes tiers by hand, and only upward.

Does the Gorgias Smile.io integration let agents adjust points? Neither Smile's nor Gorgias's documentation describes it. The integration shows points, VIP tier and referral URL beside tickets and supports Smile variables in macros and rules, on Smile's Essential plan and above.

What is Smile.io's API rate limit? 10 requests per second per token, with HTTP 429 returned past that until the next second. Enterprise plans list custom API rate limits.

How we researched this

To try the same setup on your own help desk, start a trial with $50 of free usage (about 125 tickets), no credit card, no time limit, and ask the Macha team to build the Smile tools during onboarding.

Macha

About Macha

Macha is an AI agent platform that works on top of the help desk you already use — Zendesk, Freshdesk, Gorgias, or Front — and connects to the rest of your stack, even your own internal systems. Its AI agents resolve tickets and automate entire workflows end to end, all set up in plain English, no code. Learn more about Macha →

Zendesk
5.0 on Zendesk Marketplace

Loved by support teams worldwide

See what support teams are saying about Macha AI.

The application seems excellent to me! We are still testing, and we need support for some details and they were extremely efficient too!

Daniela Costa

Daniela Costa

Head of Support, Seabra

Macha has been a great addition to our support toolkit. It generates clear, well-organized responses that fit naturally into our workflow. One feature we particularly appreciate is its ability to automatically reply in the same language as the ticket.

Marius F

Marius F

Support Head, Zentana

We've been using Macha for a little while now and it's been really great addition so far! It's powerful, convenient, and makes getting work done a lot easier for our agents.

Alexander Wedén

Alexander Wedén

Head of Support

Support team is very helpful and responsive. Really enjoy how lightweight this is within Zendesk itself vs other more intrusive tools.

Cathleen Wright

Cathleen Wright

Zendesk Admin, Cortex IO

So far it's pretty good! Our queries are a little nuanced, so we can't always use it, but it's got enough utility for us. It can even incorporate our bilingual country with greetings in a second language.

Jae Oliver

Jae Oliver

Head of Support, Wise

Really enjoying using Macha, it has made a noticeable difference to our support team in a short amount of time. I really like the ticket summary feature, saves us a lot of time.

Harry Jackson

Harry Jackson

Head of Support, Crumb

Macha AI is a great addition to my workspace! It's powerful, convenient, and it really makes productivity so much easier for our agents!

Dave G

Dave G

Head of Support, Cyber Power Systems

Very impressed! AI integration for Zendesk has certainly come a long way and Macha seems to set the standard for now. This will for sure save lot of time in our support team.

Pauli Juel

Pauli Juel

Head of CS, Dokument24

Macha has been working great for us so far! The auto-responses are accurate and our resolution time has dropped significantly.

Lana T

Lana T

Zendesk Admin, Swotzy

Macha AI is a great addition. The knowledge base feature means our agents always have the right answers at their fingertips.

Mischa Wolf

Mischa Wolf

Head of Support, Topi

We're enjoying this integration so far. It's made our support team more efficient and our customers get faster responses.

Paula G

Paula G

Head of Customer Support, Xly Studio

The team enjoys using it. It saves considerable time on common questions and the integration options are excellent.

Kilian Leister

Kilian Leister

Support Head, Didriksons

Ready to supercharge your team with AI?

Get started in minutes. Connect your tools, configure your agents, and let AI handle the rest.

$50 in free credits · no time limit, no credit card