Skip to main content

Technical Reference

Data schemas, state machines, validation rules, and low-level specifications for implementing Creator Collaboration workflows.


Profile Engagement Audiences

API Documentation: Profile Engagement Audiences

Implementation Guide: Audience Targeting


Partnership & Role Objects

API Documentation: Partnership Roles API

Key Endpoints:

  • POST /v1/public_profiles/{profile_id}/roles — Send invitation
  • GET /v1/public_profiles/{profile_id}/roles/{role_id} — Check status
  • GET /v1/public_profiles/{profile_id}/brand_partner_profiles — List brand partners
  • GET /v1/public_profiles/{profile_id}/ad_partner_profiles — List ad partners

Implementation Guide: Partnership Setup

Critical Fields:

  • partnershipLevel: BRAND_LEVEL or AD_LEVEL
  • roleStatus: PENDING, ACCEPTED, EXPIRED, or DECLINED
  • inviteeUserId: Creator's User ID (not username)

Media Objects (Collaborative)

API Documentation: Claim Media API

Key Endpoints:

  • POST /v1/adaccounts/{ad_account_id}/claim_media_by_snap_reference — Claim by Snap ID
  • POST /v1/adaccounts/{ad_account_id}/claim_media_by_ad_code — Claim by Ad Code
  • GET /v1/media/{media_entity_id} — Check processing status

Implementation Guides:

Critical Fields:

  • media_status: PENDING_UPLOAD, READY, or ERROR
  • content_source_type: ORGANIC_CONTENT for claimed media
  • Poll every 5-10 seconds until READY

Creative Objects (Partnership-Enhanced)

API Documentation: Creatives API

Key Endpoint:

  • POST /v1/adaccounts/{ad_account_id}/creatives — Create partnership ad

Implementation Guides:

Critical Fields:

  • creator_partnership_type: BRAND_PARTNERSHIP or AD_PARTNERSHIP (required for disclosure)
  • primary_profile: CREATOR or BRAND (for Ad Partnerships only)

State Machine Logic

Partnership Handshake Flow

The lifecycle of a partnership invitation.

State Transitions

From StateTo StateTriggerSystem Action
(none)PENDINGBrand calls POST /rolesPush notification sent to creator
PENDINGACCEPTEDCreator taps "Approve" in Profile SettingsPartnership becomes active
PENDINGDECLINEDCreator taps "Decline" in Profile SettingsInvitation closed
PENDINGEXPIREDNo response within invitation validity periodInvitation closed
ACCEPTEDEXPIREDapprovalTimeInDays duration completedActive ads may pause, new ads blocked

Capabilities by State

StateCreator Can Tag BrandBrand Can Discover ContentBrand Can Create Ads
PENDING
ACCEPTED✅ (BRAND_LEVEL)✅ (BRAND_LEVEL)✅ (AD_LEVEL only)
EXPIRED
DECLINED

Media Processing Flow

The lifecycle of transforming organic content into ad media.

Processing Details

StateSystem ActionDeveloper Action
UnclaimedContent lives only on Creator's profileCall claim endpoint
PENDING_UPLOADAsync: Download → Transcode → Upload to Ad Account libraryPoll GET /media/{id} every 5-10 seconds
READYMedia in Asset Library, ready for creative attachmentProceed to POST /creatives
ERRORProcessing failed (codec issue, size limit, etc.)Investigate error, retry or request new content

Timeout Handling

Recommended: Poll every 5-10 seconds with 60-minute max timeout.

Implementation: See Brand Partnerships - Developer Track for polling best practices


Content Requirements

Spotlight & Story Validation

Full Requirements: Brand Partnerships - Content Requirements

Quick Reference:

  • Spotlight: 5-60 seconds, 9:16 aspect ratio, video only
  • Stories: 3-180 seconds, 9:16 aspect ratio, expires in 24 hours unless saved
  • Music: No Snap Library music allowed in either

Ad Code Format

Format: adcode_[UUID-string]

Validation: See Ad Codes - Developer Track


Utility Endpoints

Extract Snap ID from URL: GET /v1/tools/extract_snap_id — Convert Snapchat URLs to Snap IDs

Get Profile from Snap: GET /public/v1/snaps/{snap_id}/public_profile — Find which creator owns a Snap

API Documentation: Claim Media API


Identifying Collaborative Ads

Process:

  1. Get Ad → extract creative_id
  2. Get Creative → extract top_snap_media_id
  3. Get Media → check content_source_type

If content_source_type is ORGANIC_CONTENT → Collaborative ad from creator's organic post

API Documentation:


ID Reference Guide

A common source of errors is confusing different ID types.

ID TypeUsed ForAPI Context
profile_idPublic Profile identificationRoles API, creative attribution
ad_account_idAd Account identificationMedia, Creatives, Campaigns
inviteeUserIdCreator's internal User IDRoles API invitation
snap_idSpecific organic Snap contentClaim media endpoint input
media_entity_idClaimed/uploaded media assetCreative creation
segment_idAudience segmentAd Set targeting

Profile ID vs. Ad Account ID confusion:

  • Use profile_id for Permissions (Roles API)
  • Use ad_account_id for Media and Ads (Ads API)

Attempting to add a creator role using an Ad Account ID will fail.


Error Code Reference

Error Code / MessageContextRoot CauseResolution
E3003 / "Resource not found"InvitationIncorrect profile_id or inviteeUserIdVerify IDs via Creator Discovery endpoint
INVALID_PENDING_REVIEW_STATUSAd CreationMedia still processing or Creative in reviewEnsure Media status is READY before use
"Permission Denied" (HTTP 403)Roles APIOAuth token user is not Profile AdminEnsure user has Profile Admin role
"Duplicate Role"InvitationActive invitation/role already existsCheck GET /roles before sending new invitation
media_entity_id not foundAd CreationUsing Snap ID instead of Media IDMust claim Snap ID first to get Media ID
Code expired (HTTP 404)Ad CodeAd code TTL elapsed or creator revokedRequest new code from creator

HTTP Status Code Patterns

StatusGeneral MeaningPartnership-Specific Context
200SuccessOperation completed
400Bad RequestInvalid parameters, format errors
401UnauthorizedInvalid or expired OAuth token
403ForbiddenInsufficient permissions (not Profile Admin)
404Not FoundInvalid ID, expired ad code, deleted content
409ConflictDuplicate role, already claimed media
429Rate LimitedToo many requests—implement backoff
500Server ErrorRetry with exponential backoff

Reporting Metrics

Key Metrics for Partnership Campaigns:

  • impressions — Total (organic + paid)
  • paid_impressions — Paid only
  • shares — Often higher on collaborative ads
  • saves — High-intent engagement
  • swipes — CTA engagement

Organic Impressions = impressions - paid_impressions

API Documentation: Stats & Reporting API

See Also: Brand Partnerships - Metrics & Reporting


Implementation Gotchas

1. No Webhooks for Approvals

The API does not send webhooks when creators accept invitations. You must poll every 5-10 minutes.

Implementation: See Partnership Setup - Developer Track for polling patterns

2. Required Partnership Type Flag

You must set creator_partnership_type in the Creative payload. Omitting this:

  • Creates a generic ad without "Paid Partnership" label
  • May violate FTC/advertising disclosure regulations
  • Could result in ad rejection during review

Implementation:

3. Tagging vs. Paid Partnership Label

Simple @mentions in text overlays do not trigger the partnership system.

MethodAppears in shared_snaps?Can Be Claimed?
"Paid Partnership" label✅ Yes✅ Yes
@mention in text overlay❌ No❌ No
Hashtag mention❌ No❌ No

Creators must use the official "Paid Partnership" tool when posting for content to be discoverable and claimable.


Next Steps

Was this page helpful?
Yes
No