Snapchat API
Schedule and automate Snapchat posts with Late API - Stories, Saved Stories, Spotlight content, and Public Profile management
Quick Reference
| Property | Value |
|---|---|
| Title limit | 45 chars (Saved Stories) |
| Description limit | 160 chars (Spotlight, including hashtags) |
| Media per post | 1 (single image or video only) |
| Image formats | JPEG, PNG |
| Image max size | 20 MB |
| Video format | MP4 only |
| Video max size | 500 MB |
| Video duration | 5-60 seconds |
| Post types | Story, Saved Story, Spotlight |
| Scheduling | Yes |
| Inbox | No |
| Analytics | Yes (views, viewers, screenshots, shares) |
Before You Start
Snapchat requires a Public Profile to publish content. Regular accounts cannot use the API. Also: Snapchat only supports 1 media item per post -- no carousels, no albums. This is the most restrictive platform for content format.
Additional requirements:
- Public Profile required (Person, Business, or Official)
- Single media item only (most restrictive platform)
- No text-only posts
- 9:16 vertical orientation practically required
- Media is encrypted (AES-256-CBC) before upload (handled by Late)
Quick Start
Post to Snapchat in under 60 seconds:
const { post } = await late.posts.createPost({
mediaItems: [
{ type: 'video', url: 'https://example.com/video.mp4' }
],
platforms: [{
platform: 'snapchat',
accountId: 'YOUR_ACCOUNT_ID',
platformSpecificData: {
contentType: 'story'
}
}],
publishNow: true
});
console.log('Posted to Snapchat!', post._id);result = client.posts.create(
media_items=[
{"type": "video", "url": "https://example.com/video.mp4"}
],
platforms=[{
"platform": "snapchat",
"accountId": "YOUR_ACCOUNT_ID",
"platformSpecificData": {
"contentType": "story"
}
}],
publish_now=True
)
post = result.post
print(f"Posted to Snapchat! {post['_id']}")curl -X POST https://getlate.dev/api/v1/posts \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"mediaItems": [
{"type": "video", "url": "https://example.com/video.mp4"}
],
"platforms": [{
"platform": "snapchat",
"accountId": "YOUR_ACCOUNT_ID",
"platformSpecificData": {
"contentType": "story"
}
}],
"publishNow": true
}'Content Types
Snapchat supports three content types through the Public Profile API:
| Type | Description | Duration | Text Support |
|---|---|---|---|
story | Ephemeral snap visible for 24 hours | Temporary | No caption |
saved_story | Permanent story on Public Profile | Permanent | Title (max 45 chars) |
spotlight | Video in Snapchat's entertainment feed | Permanent | Description (max 160 chars, hashtags supported) |
Story Posts
Stories are ephemeral content visible for 24 hours. No caption or text is supported.
const { post } = await late.posts.createPost({
mediaItems: [
{ type: 'image', url: 'https://example.com/image.jpg' }
],
platforms: [{
platform: 'snapchat',
accountId: 'YOUR_ACCOUNT_ID',
platformSpecificData: {
contentType: 'story'
}
}],
publishNow: true
});
console.log('Posted to Snapchat!', post._id);result = client.posts.create(
media_items=[
{"type": "image", "url": "https://example.com/image.jpg"}
],
platforms=[{
"platform": "snapchat",
"accountId": "YOUR_ACCOUNT_ID",
"platformSpecificData": {
"contentType": "story"
}
}],
publish_now=True
)
post = result.post
print(f"Posted to Snapchat! {post['_id']}")curl -X POST https://getlate.dev/api/v1/posts \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"mediaItems": [
{"type": "image", "url": "https://example.com/image.jpg"}
],
"platforms": [{
"platform": "snapchat",
"accountId": "YOUR_ACCOUNT_ID",
"platformSpecificData": {
"contentType": "story"
}
}],
"publishNow": true
}'Saved Story Posts
Saved Stories are permanent content displayed on your Public Profile. The post content is used as the title (max 45 characters).
const { post } = await late.posts.createPost({
content: 'Behind the scenes look!',
mediaItems: [
{ type: 'video', url: 'https://example.com/video.mp4' }
],
platforms: [{
platform: 'snapchat',
accountId: 'YOUR_ACCOUNT_ID',
platformSpecificData: {
contentType: 'saved_story'
}
}],
publishNow: true
});
console.log('Posted to Snapchat!', post._id);result = client.posts.create(
content="Behind the scenes look!",
media_items=[
{"type": "video", "url": "https://example.com/video.mp4"}
],
platforms=[{
"platform": "snapchat",
"accountId": "YOUR_ACCOUNT_ID",
"platformSpecificData": {
"contentType": "saved_story"
}
}],
publish_now=True
)
post = result.post
print(f"Posted to Snapchat! {post['_id']}")curl -X POST https://getlate.dev/api/v1/posts \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Behind the scenes look!",
"mediaItems": [
{"type": "video", "url": "https://example.com/video.mp4"}
],
"platforms": [{
"platform": "snapchat",
"accountId": "YOUR_ACCOUNT_ID",
"platformSpecificData": {
"contentType": "saved_story"
}
}],
"publishNow": true
}'Spotlight Posts
Spotlight is Snapchat's TikTok-like entertainment feed. Only video content is supported. The post content is used as the description (max 160 characters) and can include hashtags.
const { post } = await late.posts.createPost({
content: 'Check out this amazing sunset! #sunset #nature #viral',
mediaItems: [
{ type: 'video', url: 'https://example.com/sunset-video.mp4' }
],
platforms: [{
platform: 'snapchat',
accountId: 'YOUR_ACCOUNT_ID',
platformSpecificData: {
contentType: 'spotlight'
}
}],
publishNow: true
});
console.log('Posted to Snapchat!', post._id);result = client.posts.create(
content="Check out this amazing sunset! #sunset #nature #viral",
media_items=[
{"type": "video", "url": "https://example.com/sunset-video.mp4"}
],
platforms=[{
"platform": "snapchat",
"accountId": "YOUR_ACCOUNT_ID",
"platformSpecificData": {
"contentType": "spotlight"
}
}],
publish_now=True
)
post = result.post
print(f"Posted to Snapchat! {post['_id']}")curl -X POST https://getlate.dev/api/v1/posts \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Check out this amazing sunset! #sunset #nature #viral",
"mediaItems": [
{"type": "video", "url": "https://example.com/sunset-video.mp4"}
],
"platforms": [{
"platform": "snapchat",
"accountId": "YOUR_ACCOUNT_ID",
"platformSpecificData": {
"contentType": "spotlight"
}
}],
"publishNow": true
}'Media Requirements
Media is required for all Snapchat posts. Text-only posts are not supported.
Images
| Property | Requirement |
|---|---|
| Formats | JPEG, PNG |
| Max File Size | 20 MB |
| Recommended Dimensions | 1080 x 1920 px |
| Aspect Ratio | 9:16 (portrait) |
Videos
| Property | Requirement |
|---|---|
| Format | MP4 |
| Max File Size | 500 MB |
| Duration | 5-60 seconds |
| Min Resolution | 540 x 960 px |
| Recommended Dimensions | 1080 x 1920 px |
| Aspect Ratio | 9:16 (portrait) |
Media is automatically encrypted using AES-256-CBC before upload to Snapchat. This is handled entirely by Late.
Platform-Specific Fields
| Field | Type | Default | Description |
|---|---|---|---|
contentType | string | "story" | Content type: "story", "saved_story", or "spotlight" |
Connection
Snapchat uses OAuth for authentication and requires selecting a Public Profile to publish content.
Standard Flow
Redirect users to the Late OAuth URL:
https://getlate.dev/connect/snapchat?profileId=YOUR_PROFILE_ID&redirect_url=https://yourapp.com/callbackAfter authorization, users select a Public Profile, and Late redirects back to your redirect_url with connection details.
Headless Mode (Custom UI)
Build your own fully-branded Public Profile selector:
Step 1: Initiate OAuth
https://getlate.dev/api/v1/connect/snapchat?profileId=YOUR_PROFILE_ID&redirect_url=https://yourapp.com/callback&headless=trueAfter OAuth, you'll be redirected to your redirect_url with:
tempToken- Temporary access tokenuserProfile- URL-encoded JSON with user infopublicProfiles- URL-encoded JSON array of available Public Profilesconnect_token- Short-lived token for API authenticationplatform=snapchatstep=select_public_profile
Step 2: List Public Profiles
const { publicProfiles } = await late.connect.getSnapchatProfiles({
profileId: profileId,
tempToken: tempToken,
connectToken: connectToken
});
// Display profiles in your custom UIresult = client.connect.get_snapchat_profiles(
profile_id="YOUR_PROFILE_ID",
temp_token=temp_token,
connect_token=connect_token
)
public_profiles = result['publicProfiles']
# Display profiles in your custom UIcurl -X GET "https://getlate.dev/api/v1/connect/snapchat/select-profile?profileId=YOUR_PROFILE_ID&tempToken=TEMP_TOKEN" \
-H "X-Connect-Token: CONNECT_TOKEN"Response:
{
"publicProfiles": [
{
"id": "abc123-def456",
"display_name": "My Brand",
"username": "mybrand",
"profile_image_url": "https://cf-st.sc-cdn.net/...",
"subscriber_count": 15000
},
{
"id": "xyz789-uvw012",
"display_name": "Side Project",
"username": "sideproject",
"profile_image_url": "https://cf-st.sc-cdn.net/...",
"subscriber_count": 5000
}
]
}Step 3: Select Public Profile
const { account } = await late.connect.selectSnapchatProfile({
profileId: 'YOUR_LATE_PROFILE_ID',
selectedPublicProfile: {
id: 'abc123-def456',
display_name: 'My Brand',
username: 'mybrand'
},
tempToken: tempToken,
userProfile: userProfile,
connectToken: connectToken
});
console.log('Connected:', account._id);result = client.connect.select_snapchat_profile(
profile_id="YOUR_LATE_PROFILE_ID",
selected_public_profile={
"id": "abc123-def456",
"display_name": "My Brand",
"username": "mybrand"
},
temp_token=temp_token,
user_profile=user_profile,
connect_token=connect_token
)
print(f"Connected: {result['account']['_id']}")curl -X POST https://getlate.dev/api/v1/connect/snapchat/select-profile \
-H "X-Connect-Token: CONNECT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"profileId": "YOUR_LATE_PROFILE_ID",
"selectedPublicProfile": {
"id": "abc123-def456",
"display_name": "My Brand",
"username": "mybrand"
},
"tempToken": "TEMP_TOKEN",
"userProfile": {
"id": "user123",
"username": "mybrand",
"displayName": "My Brand"
}
}'Response:
{
"message": "Snapchat connected successfully with public profile",
"account": {
"platform": "snapchat",
"username": "mybrand",
"displayName": "My Brand",
"profilePicture": "https://cf-st.sc-cdn.net/...",
"isActive": true,
"publicProfileName": "My Brand"
}
}Analytics
Requires Analytics add-on
Available metrics via the Analytics API:
| Metric | Available |
|---|---|
| Reach (unique viewers) | ✅ |
| Shares | ✅ |
| Views | ✅ |
| Screenshots | ✅ |
| Completion Rate | ✅ |
Analytics are fetched per content type (story, saved_story, spotlight).
const analytics = await late.analytics.getAnalytics({
platform: 'snapchat',
fromDate: '2024-01-01',
toDate: '2024-01-31'
});
console.log(analytics.posts);analytics = client.analytics.get(
platform="snapchat",
from_date="2024-01-01",
to_date="2024-01-31"
)
print(analytics["posts"])curl "https://getlate.dev/api/v1/analytics?platform=snapchat&fromDate=2024-01-01&toDate=2024-01-31" \
-H "Authorization: Bearer YOUR_API_KEY"What You Can't Do
These features are not available through Snapchat's API:
- Use AR lenses or filters
- Create ads
- Access Snap Map features
- Use Snapchat sounds
- Create collaborative stories
- Access friend stories
- Send DMs or read comments
- Post text-only content (media required)
- Post multiple media items (single item only)
Common Errors
| Error | Meaning | Fix |
|---|---|---|
| "Public Profile required" | Account does not have a Public Profile set up | Ensure the Snapchat account has a Public Profile (Person, Business, or Official) and select it during the connection flow. |
| "Media is required" | Post was submitted without any media | Add an image or video. Snapchat does not support text-only posts. |
| "Only one media item supported" | Multiple media items were included | Remove extra media items. Snapchat only supports a single image or video per post. |
| Video rejected | Video does not meet Snapchat's requirements | Check duration (5-60 sec), format (MP4 only), minimum resolution (540 x 960 px), and file size (under 500 MB). |
| "Title too long" (Saved Stories) | Title exceeds 45 characters | Shorten the content field to 45 characters or fewer. |
| "Description too long" (Spotlight) | Description exceeds 160 characters | Shorten the content field to 160 characters or fewer, including hashtags. |
Inbox
Snapchat does not have inbox features available via API.
- No DMs - Snapchat's messaging API is not available for third-party apps
- No comments - Snap comments are not accessible via API
Related Endpoints
- Connect Snapchat Account - OAuth connection flow
- Create Post - Post creation and scheduling
- Upload Media - Image and video uploads
- Analytics - Fetch post analytics