Photos and video
Get photos from your phone into your library and onto the right page.
Overview
To add a photo, ask your assistant for an upload link and send the photo from your phone, or give it a link to a photo that's already online. It can't take a photo you attach in the chat, so it sends you an upload link instead.
Real photos of your team and work do more for trust than any stock image. The upload link works on your phone or computer, and photos go straight into your library, the same one our team uses.
Then tell it where the photo goes, like the main picture on your homepage or a service page. It shows you what was there before and what's there now. Take a photo down and the page goes back to its default picture, while the photo stays in your library.
A photo spot takes a photo and a video spot takes a video, so a page never ends up with the wrong kind of file. A video from your phone is prepared for smooth playback on any connection, so it may take a minute to be ready for a page. If you're not sure which photo is which, ask it to find the one you mean.
Changes here need an active account. If your account is on hold or cancelled, editing pauses until it's back.
You can also do this in your workspace. Look in Home or Site, with the Photos button (/workspace).
The tools on this page
| Tool | Reads | Writes | Asks you first |
|---|---|---|---|
| Add a photo from your phone | No | Yes | Yes |
| Add a photo from a link | No | Yes | Yes |
| See your photos | Yes | No | No |
| Put a photo on a page | No | Yes | Yes |
| Show a photo on service pages | No | Yes | Yes |
| Take a photo off a page | No | Yes | Yes |
Add a photo from your phone
create_media_upload_urlChanges your site or sends something
What you can ask
- Add a photo of the new truck.
- I want to add some shop photos.
- Send me a link to upload pictures.
What it does
The way to add a photo from a phone or computer: a link that sends photos straight into your library.
Your assistant asks you to confirm this first.
What it won't do
The link works for 30 minutes and only puts photos in your own library.
What your assistant sends
| Field | Required | Description |
|---|---|---|
file_namestring | Yes | Including the extension, e.g. van.jpg. |
content_typestring | No | MIME type, e.g. image/jpeg. Images and video only. |
owner_requeststring | No | What the owner asked for, in their words, one sentence. Optional. Stored with the audit record so their team can see what owners ask for. |
{
"file_name": "new-sign.jpg",
"content_type": "image/jpeg"
}{
"upload_page_url": "https://www.theservicemarketingguys.com/upload/abc",
"expires_in_minutes": 30,
"max_files": 20,
"instructions": "Open it on your phone."
}Add a photo from a link
add_mediaChanges your site or sends something
What you can ask
- Add this photo: <link>
- Grab the team photo from our Facebook page.
What it does
Add a photo from a public link. For a photo on your phone, use the upload link tool.
Your assistant asks you to confirm this first.
What it needs
- A public link to the photo.
What it won't do
It takes JPEG, PNG, WebP, or GIF photos up to 10 MB from a public link. A link that needs a login won't work. Send those from your phone instead.
What your assistant sends
| Field | Required | Description |
|---|---|---|
urlstring | Yes | Public https URL of an image to copy into the library. |
file_namestring | No | Defaults to the name in the URL. |
descriptionstring | No | |
alt_textstring | No | |
owner_requeststring | No | What the owner asked for, in their words, one sentence. Optional. Stored with the audit record so their team can see what owners ask for. |
{
"url": "https://images.example/new-sign.jpg",
"alt_text": "Our new sign out front"
}{
"media": {
"id": "0b8e2c1a-5f7d-4e3b-9a61-3c2d4e5f6a7b",
"file_name": "new-sign.jpg",
"url": "https://cdn.example/new-sign.jpg"
}
}See your photos
list_mediaReads only
What you can ask
- Show me the photos in my library.
- Find the picture of our new sign.
What it does
Your photos and videos. Search by type or by words.
What your assistant sends
| Field | Required | Description |
|---|---|---|
searchstring | No | Matches file name, description, and alt text. |
file_typeone of: image, video | No | |
limitinteger | No | Default 20. |
{
"file_type": "image"
}{
"media": [
{
"id": "0b8e2c1a-5f7d-4e3b-9a61-3c2d4e5f6a7b",
"file_name": "team-photo.jpg",
"url": "https://cdn.example/team-photo.jpg",
"email_src": "media://0b8e2c1a-5f7d-4e3b-9a61-3c2d4e5f6a7b",
"email_url": "https://esg.example/images/client/team-photo.jpg",
"type": "image",
"mime_type": "image/jpeg",
"size_bytes": 412880,
"dimensions": "1600x1200",
"alt_text": "The whole crew out front",
"description": null,
"created_at": "2026-09-12T14:03:11.000Z",
"tags": {
"services": [],
"cities": [],
"type": "team"
}
}
],
"awaiting_upload": []
}Put a photo on a page
attach_mediaChanges your site or sends something
What you can ask
- Use the new team photo as the main picture on my homepage.
- Put this job photo on the water heater repair page.
What it does
Put a photo or video from your library on your site, in place of what's there.
Your assistant asks you to confirm this first.
What it needs
- Where on your site it goes.
- The photo or video, from your library.
What it won't do
A photo slot takes a photo and a video slot takes a video. It won't put one in the other's place.
What your assistant sends
| Field | Required | Description |
|---|---|---|
roleenum | Yes | The slot. Every slot takes a photo except location.video and location.hero, which take an MP4. |
mediaIdstring | Yes | An id from list_media. |
targetobject | No | service.card: { type: "service", serviceSlug }. location.*: { type: "location", areaSlug }. Omit for site-wide slots. |
confirmobject | Yes | Required. One line stating the change, in the owner's words. |
owner_requeststring | No | What the owner asked for, in their words, one sentence. Optional. Stored with the audit record so their team can see what owners ask for. |
{
"role": "hero.main",
"mediaId": "0b8e2c1a-5f7d-4e3b-9a61-3c2d4e5f6a7b",
"confirm": {
"intent": "Use the new team photo on the home page"
}
}{
"recorded": true,
"applied": true,
"placementId": "7d1e9f20-3b4c-4d5e-8f6a-1b2c3d4e5f60",
"slot": "Homepage hero",
"url": "https://cdn.example/team-photo.jpg",
"previous": null,
"reversible": "Assigning a different file to the same slot deactivates this row rather than deleting it, so the previous one can be put back."
}Show a photo on service pages
tag_mediaChanges your site or sends something
What you can ask
- Show this job photo on my water heater repair page.
- Put these photos on the pages for the town the job was in.
- That one is a team photo, so put it on the about page.
What it does
Tag a photo with the services and cities it shows so it appears in those service page galleries.
Your assistant asks you to confirm this first.
What it needs
- The photo, from your library.
What it won't do
It only takes services you offer and towns you serve, so a typo is turned down instead of saved. A team or training photo goes on your about or careers page, not on service pages.
What your assistant sends
| Field | Required | Description |
|---|---|---|
media_idstring | Yes | An id from list_media. |
servicesarray of string | No | Service slugs from get_content_map. Replaces the list; [] clears it. |
citiesarray of string | No | Cities you serve or have a shop in. Replaces the list; [] clears it. |
typeone of: service, team, training | No | service (default), team (about page) or training (careers page). |
confirmobject | Yes | Required. One line stating the change, in the owner's words. |
owner_requeststring | No | What the owner asked for, in their words, one sentence. Optional. Stored with the audit record so their team can see what owners ask for. |
{
"media_id": "0b8e2c1a-5f7d-4e3b-9a61-3c2d4e5f6a7b",
"services": [
"water-heater-repair"
],
"cities": [
"Winter Haven"
],
"confirm": {
"intent": "Show the new job photo on the water heater repair pages"
}
}{
"media": {
"id": "0b8e2c1a-5f7d-4e3b-9a61-3c2d4e5f6a7b",
"file_name": "job-photo.jpg",
"url": "https://cdn.example/job-photo.jpg",
"alt_text": "The finished job"
},
"tags": {
"services": [
"water-heater-repair"
],
"cities": [
"Winter Haven"
],
"type": null
},
"shows_on": [
"/services/water-heater-repair",
"/service-areas/winter-haven-fl/water-heater-repair"
]
}Take a photo off a page
detach_mediaChanges your site or sends something
What you can ask
- Take that photo off the about page.
- Go back to the default picture on the homepage.
What it does
Take a photo or video off your site. The page shows its default again, and the file stays in your library.
Your assistant asks you to confirm this first.
What it needs
- Which spot on your site to clear.
What it won't do
The photo stays in your library, so you can put it back any time.
What your assistant sends
| Field | Required | Description |
|---|---|---|
roleenum | Yes | The slot to empty. |
targetobject | No | service.card: { type: "service", serviceSlug }. location.*: { type: "location", areaSlug }. Omit for site-wide slots. |
confirmobject | Yes | Required. One line stating the change, in the owner's words. |
owner_requeststring | No | What the owner asked for, in their words, one sentence. Optional. Stored with the audit record so their team can see what owners ask for. |
{
"role": "hero.main",
"confirm": {
"intent": "Take the old photo off the home page"
}
}{
"removed": true,
"applied": true,
"slot": "Homepage hero",
"previous": null,
"reversible": "The file stays in the library; attach_media with its id puts it back."
}