HLAI Experts

Guide · Snippets

SMS snippets created through the HighLevel API come out blank

If a GoHighLevel (GHL) text snippet made by your code shows up with a name and no message, the create call kept the record and dropped the body. In the integration we built, the fix is a second call that writes the name, type and body together, then a read-back to prove the text is there.

Rob EasonPublished

One warning first. The snippet calls we use are internal routes that HighLevel's own web app makes, not a documented public API, and we haven't found a public route for writing snippets. Treat what follows as a workaround we've observed, and expect it to change.

What you're looking at

The snippet appears in Conversations > Snippets under the name you sent. Open it and the message is empty. Your code logged a success, so nothing flagged it.

That success is the trap. A good response from the create call tells you a record exists. It doesn't tell you the body was kept.

Make sure it's a snippet you're writing

In HighLevel, reusable text for SMS is a Text Snippet. A workflow's Send SMS action pulls it in through its Templates selector.

Email-builder templates are a different thing, with their own documented route. HighLevel's current public route for creating one is POST /emails/locations/{locationId}/templates with Version v3, and the older v2 create route is marked deprecated. Neither makes a text snippet, so don't point snippet code at them.

Why the body disappears

In the recipe we recorded, creating a snippet is a POST that returns a new record with no body in it. The text has to be written afterwards, by a PUT to that same record.

The PUT replaces the whole record. Send only the body and the name can be wiped. So the update carries everything at once: the name, the type, and the message nested under template.body.

Our own notes haven't always agreed on this. An earlier note described the body being accepted on create. We now write it in a second step and read it back either way, because that holds whichever behavior you get. HighLevel has changed this before, so check what your own calls return.

The fix, step by step

This is the order we run it in. Nothing in it is clever. Skipping the last two steps is how blank snippets end up inside live workflows.

  1. Confirm that what you're making is a Text Snippet, not an email template.
  2. Create the snippet and keep the id that comes back.
  3. Update that id with the name, the type and template.body in one request.
  4. Read the saved snippet back and compare its body with what you sent.
  5. Open it in Conversations > Snippets and look at it once before any workflow uses it.
The create response says a record exists. Only a read-back says the message is in it.

Repairing a blank snippet by hand

If only a few came out empty, fixing them in the app is quicker than rerunning code. Open Conversations > Snippets, find the blank one, edit it, paste the message and save.

To make a new one by hand, the current screen uses + New Snippet, then Add Text Snippet. Older guides call the button Add Snippet. HighLevel has renamed it before, so go by what you see.

After any fix, open a workflow's Send SMS action, pick the snippet from Templates, and read the text that fills in.

Mistakes that blank it again

Once the integration works, these are the habits that break it again.

  • Sending the body alone on the update and losing the name.
  • Counting a success response as proof the text saved.
  • Pointing snippet code at an email-template route because that route has docs.
  • Running a long-lived integration on an internal route with no check that would catch it changing.

Rather have it set up for you?

We'll put your text snippets in place with the copy inside them, check every one and wire them into the workflows that send them, starting from a 30-minute 1:1 with Rob.

Book a 1:1 with Rob

Questions

Snippet API questions

Is there a public HighLevel API for SMS snippets?
We haven't found a public, documented route for writing snippets. The calls we've used are internal ones that HighLevel's web app makes, and those can change without notice. The documented way to make one is in Conversations > Snippets.
Why did my snippet lose its name after I fixed the body?
In the recipe we recorded, the update replaces the whole snippet record. If the update sends only the body, the name can be wiped. Send the name, type and body together every time.
Can I use the email template API for text messages?
No. Email-builder templates and text snippets are different things in HighLevel, and one route doesn't stand in for the other. The current public email-template create route is the v3 one, and the older v2 route is marked deprecated.
How do I know a snippet saved correctly?
Read it back after the update and compare the body with what you sent, because a success response on create doesn't prove the body was kept. Then select it from the Templates picker in a Send SMS action and check the text there.
Rob Eason

Who you talk to

Rob Eason

Rob runs HLAI Experts and takes the 1:1 calls himself.

He is a HighLevel Certified Admin with the second-most reviews in HighLevel's Certified Admin Directory worldwide, all of them 5 out of 5.

He won HighLevel's Top New Subaccounts via AI Employee award in its 2025 Summer of AI Awards and taught HighLevel's official masterclass on its AI Employee.

Before HighLevel, he co-owned a 60-employee financial services firm and sold his share.

On the call he looks at your account, not a script.

5/5 across 83 reviews in HighLevel's Certified Admin Directory