Platforms
Publish Stories, Saved Stories and Spotlight videos to a Snapchat Public Profile and read views, reach and shares. In beta.
Snapchat publishing goes to a Public Profile: a Story that lasts 24 hours, a Saved Story that stays on the profile, or a Spotlight video in Snapchat's public feed. You use the same POST /v1/posts call with the platform id snapchat.
Snapchat connections are not open to every workspace yet. A workspace without access gets 403 with code PLATFORM_BETA_RESTRICTED when it asks for a connect URL, before any Snapchat screen appears. Retrying does not help. Write to support@pozy.ai if you need Snapchat, and branch on code, not on the message text.
#What you can do
| Feature | Supported | Where |
|---|---|---|
| Story (24 hours, no caption) | Yes | Post types |
| Saved Story (permanent, with a title) | Yes | Post types |
| Spotlight (permanent video, with a description) | Yes | Post types |
| Scheduling | Yes | Scheduling |
| Analytics | Views, reach, shares | Analytics |
| DMs, comments | No | Snapchat's messaging API is closed to third-party apps |
| Text-only posts, carousels | No | Every post needs exactly one image or video |
#Connect
Only a Snapchat Public Profile (Person, Business or Official) can publish through the API. A regular account cannot.
Request a connect URL with the platform snapchat and send the user to authUrl. After they authorize, they choose which Public Profile to connect. Pozy hosts that picker by default. With headless=true you build it yourself with List Snapchat profiles and Select Snapchat profile. See Hosted connect and Headless connect.
curl "https://api.pozy.ai/v1/connect/snapchat?profileId=66a1f0c2a4b9d3e8f1a2b3c4&redirect_url=https://app.example.com/connected" \
-H "Authorization: Bearer $POZY_API_KEY"#Post types
platformSpecificData.contentType picks the format. It defaults to story.
contentType |
What it publishes | Lifetime | How content is used |
|---|---|---|---|
story |
A snap in the profile's Story | 24 hours | Ignored. Stories have no caption |
saved_story |
A permanent story on the Public Profile | Permanent | Title, up to 45 characters |
spotlight |
A video in the Spotlight feed (video only) | Permanent | Description, up to 160 characters including hashtags |
curl -X POST https://api.pozy.ai/v1/posts \
-H "Authorization: Bearer $POZY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Behind the scenes at the shoot #bts",
"mediaItems": [{ "type": "video", "url": "https://pozy.ai/media/bts-vertical.mp4" }],
"platforms": [{
"platform": "snapchat",
"accountId": "66b2e19d8c3f5a7e9d0b1c2d",
"platformSpecificData": { "contentType": "spotlight" }
}],
"publishNow": true
}'const res = await fetch("https://api.pozy.ai/v1/posts", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.POZY_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
content: "Behind the scenes at the shoot #bts",
mediaItems: [{ type: "video", url: "https://pozy.ai/media/bts-vertical.mp4" }],
platforms: [{
platform: "snapchat",
accountId: "66b2e19d8c3f5a7e9d0b1c2d",
platformSpecificData: { contentType: "spotlight" },
}],
publishNow: true,
}),
});
const data = await res.json();
if (!res.ok) throw new Error(data.error);
console.log(data.post.status);import os, requests
resp = requests.post(
"https://api.pozy.ai/v1/posts",
headers={"Authorization": f"Bearer {os.environ['POZY_API_KEY']}"},
json={
"content": "Behind the scenes at the shoot #bts",
"mediaItems": [{"type": "video", "url": "https://pozy.ai/media/bts-vertical.mp4"}],
"platforms": [{
"platform": "snapchat",
"accountId": "66b2e19d8c3f5a7e9d0b1c2d",
"platformSpecificData": {"contentType": "spotlight"},
}],
"publishNow": True,
},
)
print(resp.json()["post"]["status"])For a Story, drop contentType (or set "story") and send an image or a video. For a Saved Story, set "saved_story" and keep content under 45 characters.
| Field | Type | Notes |
|---|---|---|
contentType |
story, saved_story or spotlight |
Default story |
#Media requirements
Every post carries exactly one image or one video, in vertical 9:16. Files outside these limits are rejected, not compressed.
| Images | Requirement |
|---|---|
| Formats | JPEG, PNG |
| Max size | 20 MB |
| Recommended | 1080 x 1920 px (9:16) |
| Videos | Requirement |
|---|---|
| Format | MP4 |
| Max size | 500 MB |
| Duration | 5 to 60 seconds |
| Minimum resolution | 540 x 960 px |
| Recommended | 1080 x 1920 px (9:16) |
Snapchat requires media to be encrypted before upload. Pozy does that for you, so you send a normal URL. Upload through Media for a URL that qualifies.
#Limits
| Limit | Value |
|---|---|
| Media per post | Exactly 1 |
| Saved Story title | 45 characters |
| Spotlight description | 160 characters, hashtags included |
| Spotlight media | Video only |
Not available through Snapchat's API: AR lenses and filters, Snap Map, Snapchat sounds, collaborative stories, friends' stories, DMs and comments. Snapchat ads are not part of the Snapchat connection.
#Analytics
Get post analytics with platform=snapchat returns:
| Metric | Field |
|---|---|
| Views | views |
| Unique viewers | reach |
| Shares | shares |
likes, comments and saves are always 0, because Snapchat has none of them. Screenshot counts and completion rates are not exposed.
#Inbox
Snapchat accounts do not appear in the Inbox. Snapchat does not give third-party apps access to DMs or snap replies.
#Errors you may see
| Error | Cause | Fix |
|---|---|---|
403 PLATFORM_BETA_RESTRICTED |
Snapchat is not enabled for this workspace | Contact support@pozy.ai |
| "Public Profile required" | The account has no Public Profile | Create one in Snapchat and choose it while connecting |
| "Media is required" | No media on the post | Add one image or video |
| "Only one media item supported" | More than one media item | Send a single file |
| Video rejected | Duration, format, resolution or size is out of range | Check 5 to 60 seconds, MP4, at least 540 x 960 px, under 500 MB |
| "Title too long" | Saved Story content over 45 characters |
Shorten it |
| "Description too long" | Spotlight content over 160 characters |
Shorten it, hashtags included |
Errors covers the error format.
#Endpoints
| Endpoint | What it does |
|---|---|
GET /v1/connect/{platform} |
Get OAuth connect URL |
GET /v1/connect/snapchat/select-profile |
List Snapchat profiles |
POST /v1/connect/snapchat/select-profile |
Select Snapchat profile |
POST /v1/posts |
Create post |
GET /v1/analytics |
Get post analytics |
#Webhook events
| Event | When it fires |
|---|---|
post.published |
Post published. |
post.failed |
Post failed. |
post.platform.published |
Post platform published. |
post.platform.failed |
Post platform failed. |
post.platform.deleted |
Post platform deleted. |