Skip to content

Reference

Build on the Lucra API.

Drag a sticker to move it. With the keyboard, the arrow keys move it and Enter picks the next one.

Run as creator

Run a creator's work from their own account on Instagram, TikTok, Snapchat and YouTube.

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:

  1. You ask with POST /v1/ad-authorizations, or, for a post that's already on TikTok or YouTube, by adding it to your library.
  2. The creator does one thing on their platform. They get the request in Lucra, and a requestUrl works without a Lucra account.
  3. The platform confirms it. The authorization turns granted and you get ad_authorization.granted.
  4. You run it. Pick the creator or their post in a campaign.

The one step on each platform

PlatformWhat you ask forWhat the creator doesHow Lucra knows
Instagram (Meta)One of their approved submissionsApproves your brand in Instagram (Professional dashboard › Partnership ads › Ad partners), then grants it in LucraMeta confirms the partnership
TikTokA post already on TikTok, by its linkSends the post's Spark code from the request linkLucra checks the code with TikTok
TikTok, new videosNothing: joining a program that runs creator-identity ads asks for itApproves your Business Center's ads-only request once, from the link on their program in LucraLucra checks TikTok every hour
Snapchat (beta)One of their approved submissions, with their Snapchat usernameAccepts your invite in Snapchat (Profile › Settings › Pending invitations)Lucra checks Snapchat every hour
YouTube (beta)A video or Short already on YouTube, by its linkApproves 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:

JSON
{ "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:

JSON
{ "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's creatives, 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.creator to the authorization's platformProfileId. settings.creator: null runs 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

As creatorread

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_…
  • platformenum
    metatiktoksnapchatgoogle
  • statusstring

    One 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_…nullable
  • accountacct_…

    The brand that asks.

  • brandNamestring
  • platformenum
    metatiktoksnapchatgoogle
  • statusenum

    requested by the brand, granted by the creator, revoked by either; expired once expiresAt passes.

    requestedgrantedrevokedexpired
  • handlestringnullable

    On TikTok, the handle of the post's creator.

  • postobjectnullable

    On TikTok, the post the brand wants to run.

    Show 4 child fields
    • urlstringnullable
    • handlestringnullable
    • captionstringnullable
    • thumbnailUrlstringnullable

      TikTok's poster image; it expires, so read the authorization again for a fresh one.

  • requestUrlstringnullable

    On 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.

  • platformProfileIdstringnullable

    On Snapchat, the creator's profile once they accept: a campaign's settings.creator.

  • authorizedAtstringnullable
  • expiresAtstringnullable

    When the creator's authorization (on TikTok, their Spark code) ends.

  • revokedAtstringnullable
  • versioninteger

    Send it back on PATCH to reject edits based on a stale read.

  • createdAtstring
  • updatedAtstring

GET/v1/ad-authorizations/:id

As creatorread

Get an ad authorization

const { data } = await lucra.adAuthorizations.retrieve({
  path: { id: "adauth_…" },
})

Path parameters

  • idadauth_…· required
Response20017 fieldsShow
  • idadauth_…
  • submissionsub_…
  • creatorcrtr_…nullable
  • accountacct_…

    The brand that asks.

  • brandNamestring
  • platformenum
    metatiktoksnapchatgoogle
  • statusenum

    requested by the brand, granted by the creator, revoked by either; expired once expiresAt passes.

    requestedgrantedrevokedexpired
  • handlestringnullable

    On TikTok, the handle of the post's creator.

  • postobjectnullable

    On TikTok, the post the brand wants to run.

    Show 4 child fields
    • urlstringnullable
    • handlestringnullable
    • captionstringnullable
    • thumbnailUrlstringnullable

      TikTok's poster image; it expires, so read the authorization again for a fresh one.

  • requestUrlstringnullable

    On 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.

  • platformProfileIdstringnullable

    On Snapchat, the creator's profile once they accept: a campaign's settings.creator.

  • authorizedAtstringnullable
  • expiresAtstringnullable

    When the creator's authorization (on TikTok, their Spark code) ends.

  • revokedAtstringnullable
  • versioninteger

    Send it back on PATCH to reject edits based on a stale read.

  • createdAtstring
  • updatedAtstring

POST/v1/ad-authorizations

write

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_…· required

    An approved submission of a creator, or on TikTok an existing post in your library.

  • platformenum· required
    metatiktoksnapchatgoogle
  • handlestring

    On Snapchat: the creator's Snapchat username, which Lucra invites.

Response20117 fieldsShow
  • idadauth_…
  • submissionsub_…
  • creatorcrtr_…nullable
  • accountacct_…

    The brand that asks.

  • brandNamestring
  • platformenum
    metatiktoksnapchatgoogle
  • statusenum

    requested by the brand, granted by the creator, revoked by either; expired once expiresAt passes.

    requestedgrantedrevokedexpired
  • handlestringnullable

    On TikTok, the handle of the post's creator.

  • postobjectnullable

    On TikTok, the post the brand wants to run.

    Show 4 child fields
    • urlstringnullable
    • handlestringnullable
    • captionstringnullable
    • thumbnailUrlstringnullable

      TikTok's poster image; it expires, so read the authorization again for a fresh one.

  • requestUrlstringnullable

    On 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.

  • platformProfileIdstringnullable

    On Snapchat, the creator's profile once they accept: a campaign's settings.creator.

  • authorizedAtstringnullable
  • expiresAtstringnullable

    When the creator's authorization (on TikTok, their Spark code) ends.

  • revokedAtstringnullable
  • versioninteger

    Send it back on PATCH to reject edits based on a stale read.

  • createdAtstring
  • updatedAtstring

PATCH/v1/ad-authorizations/:id

As creatorwrite

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· required
    grantedrevoked
  • codestring

    On 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.

  • expiresAtstring

    On Meta, with granted: when the creator's authorization ends, as they set it on the platform.

  • versioninteger
Response20017 fieldsShow
  • idadauth_…
  • submissionsub_…
  • creatorcrtr_…nullable
  • accountacct_…

    The brand that asks.

  • brandNamestring
  • platformenum
    metatiktoksnapchatgoogle
  • statusenum

    requested by the brand, granted by the creator, revoked by either; expired once expiresAt passes.

    requestedgrantedrevokedexpired
  • handlestringnullable

    On TikTok, the handle of the post's creator.

  • postobjectnullable

    On TikTok, the post the brand wants to run.

    Show 4 child fields
    • urlstringnullable
    • handlestringnullable
    • captionstringnullable
    • thumbnailUrlstringnullable

      TikTok's poster image; it expires, so read the authorization again for a fresh one.

  • requestUrlstringnullable

    On 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.

  • platformProfileIdstringnullable

    On Snapchat, the creator's profile once they accept: a campaign's settings.creator.

  • authorizedAtstringnullable
  • expiresAtstringnullable

    When the creator's authorization (on TikTok, their Spark code) ends.

  • revokedAtstringnullable
  • versioninteger

    Send it back on PATCH to reject edits based on a stale read.

  • createdAtstring
  • updatedAtstring