Run a creator's work as an ad from their own account: their name and picture on the ad, your brand as sponsor. It works the same way on every platform:
- You ask with
POST /v1/ad-authorizations, or, for a post that's already on TikTok or YouTube, by adding it to your library. - The creator does one thing on their platform. They get the request in Lucra, and a
requestUrlworks without a Lucra account. - The platform confirms it. The authorization turns
grantedand you getad_authorization.granted. - You run it. Pick the creator or their post in a campaign.
The one step on each platform
| Platform | What you ask for | What the creator does | How Lucra knows |
|---|---|---|---|
| Instagram (Meta) | One of their approved submissions | Approves your brand in Instagram (Professional dashboard › Partnership ads › Ad partners), then grants it in Lucra | Meta confirms the partnership |
| TikTok | A post already on TikTok, by its link | Sends the post's Spark code from the request link | Lucra checks the code with TikTok |
| TikTok, new videos | Nothing: joining a program that runs creator-identity ads asks for it | Approves your Business Center's ads-only request once, from the link on their program in Lucra | Lucra checks TikTok every hour |
| Snapchat (beta) | One of their approved submissions, with their Snapchat username | Accepts your invite in Snapchat (Profile › Settings › Pending invitations) | Lucra checks Snapchat every hour |
| YouTube (beta) | A video or Short already on YouTube, by its link | Approves your link in YouTube Studio (Google emails it to them) | Lucra checks Google every hour |
Ask
On Instagram and Snapchat, ask for one of the creator's approved submissions. Snapchat also needs their username:
{ "submission": "sub_14XA4WGiSOmaVI3B4QLm4Fs", "platform": "snapchat", "handle": "creator.handle" }
On TikTok and YouTube, add their post to your library with POST /v1/submissions on that platform's ad connection. Its authorization is created with it:
{ "post": { "connection": "conn_02PEZI7pHWLT3UpakbRmfNB", "url": "https://www.youtube.com/shorts/aBcD3fGh1jK" } }
The submission's adAuthorization is the request. Send the creator its requestUrl if they aren't on Lucra. If a TikTok creator gives you the Spark code directly, add the post with "code": "…" and it's ready at once.
To run a creator's program videos under their TikTok account, nothing per video is needed: their whole account is approved to your Business Center once. Their application's tiktokApproval (on GET /v1/applications) shows where that stands, with the url they open while it's pending.
Run it
- Instagram: a Meta campaign with
identity: "creator"uses the granted submission. - TikTok and YouTube: put the post's
sub_ID in the campaign'screatives, on the same connection. A campaign runs either existing posts or uploaded videos. YouTube posts run in Google website campaigns. - Snapchat: set the campaign's
settings.creatorto the authorization'splatformProfileId.settings.creator: nullruns the ads as your brand again.
Until the creator has done their step, a campaign that uses their work answers 409 or 422, saying what's missing.
Renewals and revoking
Three days before a TikTok Spark code ends, Lucra asks the creator for a new one and sends ad_authorization.requested. Either side can revoke with PATCH /v1/ad-authorizations/:id and { "status": "revoked" }. On Snapchat and YouTube, Lucra also revokes it if the creator ends the partnership or removes the link.
Existing posts never pay their creator through Lucra, since they aren't part of a program. Snapchat and YouTube are in beta, by approval only: ask your Lucra contact to turn them on for your account.
Endpoints
GET/v1/ad-authorizations
List ad authorizations: a brand's requests, or, as a creator, the ones asked of you
const { data } = await lucra.adAuthorizations.list({
query: { submission: "sub_…" },
})Query parameters
submissionsub_…platformenummetatiktoksnapchatgooglestatusstringOne or more, comma-separated: requested, granted, revoked, expired.
Plus paging: limit, cursor, createdAfter and createdBefore.
Response200A page of items, 17 fields each, and nextCursorShow
idadauth_…submissionsub_…creatorcrtr_…nullableaccountacct_…The brand that asks.
brandNamestringplatformenummetatiktoksnapchatgooglestatusenumrequested by the brand, granted by the creator, revoked by either; expired once
expiresAtpasses.requestedgrantedrevokedexpiredhandlestringnullableOn TikTok, the handle of the post's creator.
postobjectnullableOn TikTok, the post the brand wants to run.
Show 4 child fieldsHide child fields
urlstringnullablehandlestringnullablecaptionstringnullablethumbnailUrlstringnullableTikTok's poster image; it expires, so read the authorization again for a fresh one.
requestUrlstringnullableOn TikTok and Google, a link the creator opens, without a Lucra account: to send their Spark code, or the steps to approve the video in YouTube Studio.
platformProfileIdstringnullableOn Snapchat, the creator's profile once they accept: a campaign's
settings.creator.authorizedAtstringnullableexpiresAtstringnullableWhen the creator's authorization (on TikTok, their Spark code) ends.
revokedAtstringnullableversionintegerSend it back on PATCH to reject edits based on a stale read.
createdAtstringupdatedAtstring
GET/v1/ad-authorizations/:id
Get an ad authorization
const { data } = await lucra.adAuthorizations.retrieve({
path: { id: "adauth_…" },
})Path parameters
idadauth_…· required
Response20017 fieldsShow
idadauth_…submissionsub_…creatorcrtr_…nullableaccountacct_…The brand that asks.
brandNamestringplatformenummetatiktoksnapchatgooglestatusenumrequested by the brand, granted by the creator, revoked by either; expired once
expiresAtpasses.requestedgrantedrevokedexpiredhandlestringnullableOn TikTok, the handle of the post's creator.
postobjectnullableOn TikTok, the post the brand wants to run.
Show 4 child fieldsHide child fields
urlstringnullablehandlestringnullablecaptionstringnullablethumbnailUrlstringnullableTikTok's poster image; it expires, so read the authorization again for a fresh one.
requestUrlstringnullableOn TikTok and Google, a link the creator opens, without a Lucra account: to send their Spark code, or the steps to approve the video in YouTube Studio.
platformProfileIdstringnullableOn Snapchat, the creator's profile once they accept: a campaign's
settings.creator.authorizedAtstringnullableexpiresAtstringnullableWhen the creator's authorization (on TikTok, their Spark code) ends.
revokedAtstringnullableversionintegerSend it back on PATCH to reject edits based on a stale read.
createdAtstringupdatedAtstring
POST/v1/ad-authorizations
Ask a creator to let you run their work under their identity: a submission on Meta or Snapchat, an existing TikTok post
const { data } = await lucra.adAuthorizations.create({
body: { submission: "sub_…", platform: "meta" },
})Body
submissionsub_…· requiredAn approved submission of a creator, or on TikTok an existing post in your library.
platformenum· requiredmetatiktoksnapchatgooglehandlestringOn Snapchat: the creator's Snapchat username, which Lucra invites.
Response20117 fieldsShow
idadauth_…submissionsub_…creatorcrtr_…nullableaccountacct_…The brand that asks.
brandNamestringplatformenummetatiktoksnapchatgooglestatusenumrequested by the brand, granted by the creator, revoked by either; expired once
expiresAtpasses.requestedgrantedrevokedexpiredhandlestringnullableOn TikTok, the handle of the post's creator.
postobjectnullableOn TikTok, the post the brand wants to run.
Show 4 child fieldsHide child fields
urlstringnullablehandlestringnullablecaptionstringnullablethumbnailUrlstringnullableTikTok's poster image; it expires, so read the authorization again for a fresh one.
requestUrlstringnullableOn TikTok and Google, a link the creator opens, without a Lucra account: to send their Spark code, or the steps to approve the video in YouTube Studio.
platformProfileIdstringnullableOn Snapchat, the creator's profile once they accept: a campaign's
settings.creator.authorizedAtstringnullableexpiresAtstringnullableWhen the creator's authorization (on TikTok, their Spark code) ends.
revokedAtstringnullableversionintegerSend it back on PATCH to reject edits based on a stale read.
createdAtstringupdatedAtstring
PATCH/v1/ad-authorizations/:id
Grant an ad authorization as its creator (on TikTok, with the post's Spark code), or revoke it
const { data } = await lucra.adAuthorizations.update({
path: { id: "adauth_…" },
body: { status: "granted" },
})Path parameters
idadauth_…· required
Body
statusenum· requiredgrantedrevokedcodestringOn TikTok, with granted: the Spark code the creator made for the post. The brand may send one the creator gave them too. A new code renews an expired authorization.
expiresAtstringOn Meta, with granted: when the creator's authorization ends, as they set it on the platform.
versioninteger
Response20017 fieldsShow
idadauth_…submissionsub_…creatorcrtr_…nullableaccountacct_…The brand that asks.
brandNamestringplatformenummetatiktoksnapchatgooglestatusenumrequested by the brand, granted by the creator, revoked by either; expired once
expiresAtpasses.requestedgrantedrevokedexpiredhandlestringnullableOn TikTok, the handle of the post's creator.
postobjectnullableOn TikTok, the post the brand wants to run.
Show 4 child fieldsHide child fields
urlstringnullablehandlestringnullablecaptionstringnullablethumbnailUrlstringnullableTikTok's poster image; it expires, so read the authorization again for a fresh one.
requestUrlstringnullableOn TikTok and Google, a link the creator opens, without a Lucra account: to send their Spark code, or the steps to approve the video in YouTube Studio.
platformProfileIdstringnullableOn Snapchat, the creator's profile once they accept: a campaign's
settings.creator.authorizedAtstringnullableexpiresAtstringnullableWhen the creator's authorization (on TikTok, their Spark code) ends.
revokedAtstringnullableversionintegerSend it back on PATCH to reject edits based on a stale read.
createdAtstringupdatedAtstring