Reference

Build on the Lucra API.

Drag a sticker to move it, or use the arrow keys while focused.

All endpoints

Every endpoint and field.

Every endpoint with what it accepts and returns, generated from the API itself so it always matches. Each shows its SDK method. Conventions are in the introduction.

Account

GET/v1/account
read

Get the key's own account

const { data } = await lucra.account.retrieve()
Response20021 fieldsShow
  • idacct_…
  • typeenum
    brandpartner
  • namestring
  • statusenum

    ended: a brand whose relationship with your partner account ended; it reads, but no longer changes.

    activeended
  • managedByacct_…nullable
  • brandFeeobjectnullable

    The managing partner's own fee on this brand; null when it's on the partner's default (GET /v1/account partner.brandFee).

    Show 2 child fields
    • ofenum
      ad_spendgmv
    • percentnumber
  • partnerobjectnullable

    A partner's take rates; null for a brand.

    Show 2 child fields
    • creatorTakeRateobjectnullable
      Show 1 child field
      • percentnumber
    • brandFeeobjectnullable
      Show 2 child fields
      • ofenum
        ad_spendgmv
      • percentnumber
  • emailstringnullable
  • phonestringnullable
  • profilePicturefile_…nullable
  • imageobjectnullable

    The account's logo, with a short-lived url.

    Show 5 child fields
    • fileIdfile_…nullable
    • urlstring
    • widthnumbernullable
    • heightnumbernullable
    • blurHashstringnullable
  • paymentMethodobjectnullable

    A brand's payment method; null means none yet (add one with POST /v1/connections, provider card), and always null for a partner.

    Show 3 child fields
    • statusstring
      active
    • brandstringnullable
    • last4stringnullable
  • payoutsobject

    Where it's paid: verified identity lets earnings reach its balance; a bank account is asked for on the first withdrawal. Set up with POST /v1/connections (provider stripe).

    Show 2 child fields
    • identityobject
      Show 1 child field
      • statusenum
        requiredpendingverified
    • bankAccountobjectnullable
      Show 1 child field
      • statusenum
        missingadded
  • brandsobjectnullable

    The brands a partner key reaches; null on a managed brand.

    Show 1 child field
    • countinteger
  • creatorsobjectnullable

    The account's creators and roster; null on a managed brand.

    Show 1 child field
    • countinteger
  • descriptionstringnullable
  • recruitmentobject
    Show 2 child fields
    • headlinestringnullable
    • descriptionstringnullable
  • listingobjectnullable

    A partner's marketplace listing; null for a brand.

    Show 4 child fields
    • listedboolean
    • headlinestringnullable
    • categoriesstring[]
    • registeredAtstringnullable
  • versioninteger
  • createdAtstring
  • updatedAtstring
PATCH/v1/account
write

Update the key's own account

const { data } = await lucra.account.update({
  body: { creatorTakeRate: {} },
})

Body

  • creatorTakeRateobjectnullable

    The partner's cut of each payment to a creator it brought, taken from the creator's side. Up to 20%.

    Show 1 child field
    • percentnumber· required
  • brandFeeobjectnullable
    Show 2 child fields
    • ofenum· required
      ad_spendgmv
    • percentnumber· required
  • profilePicturefile_…nullable
  • namestring
  • descriptionstringnullable
  • recruitmentobject
    Show 2 child fields
    • headlinestringnullable
    • descriptionstringnullable
  • typeenum
    brandpartner
  • listingobject
    Show 3 child fields
    • listedboolean
    • headlinestringnullable
    • categoriesstring[]
  • versioninteger
Response20021 fieldsShow
  • idacct_…
  • typeenum
    brandpartner
  • namestring
  • statusenum

    ended: a brand whose relationship with your partner account ended; it reads, but no longer changes.

    activeended
  • managedByacct_…nullable
  • brandFeeobjectnullable

    The managing partner's own fee on this brand; null when it's on the partner's default (GET /v1/account partner.brandFee).

    Show 2 child fields
    • ofenum
      ad_spendgmv
    • percentnumber
  • partnerobjectnullable

    A partner's take rates; null for a brand.

    Show 2 child fields
    • creatorTakeRateobjectnullable
      Show 1 child field
      • percentnumber
    • brandFeeobjectnullable
      Show 2 child fields
      • ofenum
        ad_spendgmv
      • percentnumber
  • emailstringnullable
  • phonestringnullable
  • profilePicturefile_…nullable
  • imageobjectnullable

    The account's logo, with a short-lived url.

    Show 5 child fields
    • fileIdfile_…nullable
    • urlstring
    • widthnumbernullable
    • heightnumbernullable
    • blurHashstringnullable
  • paymentMethodobjectnullable

    A brand's payment method; null means none yet (add one with POST /v1/connections, provider card), and always null for a partner.

    Show 3 child fields
    • statusstring
      active
    • brandstringnullable
    • last4stringnullable
  • payoutsobject

    Where it's paid: verified identity lets earnings reach its balance; a bank account is asked for on the first withdrawal. Set up with POST /v1/connections (provider stripe).

    Show 2 child fields
    • identityobject
      Show 1 child field
      • statusenum
        requiredpendingverified
    • bankAccountobjectnullable
      Show 1 child field
      • statusenum
        missingadded
  • brandsobjectnullable

    The brands a partner key reaches; null on a managed brand.

    Show 1 child field
    • countinteger
  • creatorsobjectnullable

    The account's creators and roster; null on a managed brand.

    Show 1 child field
    • countinteger
  • descriptionstringnullable
  • recruitmentobject
    Show 2 child fields
    • headlinestringnullable
    • descriptionstringnullable
  • listingobjectnullable

    A partner's marketplace listing; null for a brand.

    Show 4 child fields
    • listedboolean
    • headlinestringnullable
    • categoriesstring[]
    • registeredAtstringnullable
  • versioninteger
  • createdAtstring
  • updatedAtstring

Analytics

GET/v1/analytics
As creatorread

Get daily ad results, or creators' organic results, optionally filtered and split by campaign, submission, creator, ad or platform; as a creator, your own work's ad results across brands

const { data } = await lucra.analytics.retrieve({
  query: { from: "…", to: "…" },
})

Query parameters

  • fromstring· required
  • tostring· required
  • modeenum

    paid: ad results. organic: creators' own posts' views and engagement, for the last 90 days at most.

    paidorganic
  • campaigncamp_…
  • submissionsub_…
  • programprog_…
  • creatorcrtr_…
  • platformenum
    metatiktokgooglesnapchatinstagram
  • sourceenum

    Paid results of: lucra, the ads Lucra launched (the default); external, the other ads in your connected ad accounts (no campaign, submission or creator, and no usage fees); or all of them.

    lucraexternalall
  • groupstring

    Split each day by campaign, submission (the creative), creator, ad and/or platform, e.g. group=campaign,submission.

Applications

GET/v1/applications
As creatorread

List applications

const { data } = await lucra.applications.list({
  query: { program: "prog_…" },
})

Query parameters

  • programprog_…
  • creatorcrtr_…
  • statusstring

    One or more, comma-separated: pending, approved, rejected, withdrawn.

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 15 fields each, and nextCursorShow
  • idappl_…
  • programprog_…
  • creatorcrtr_…
  • statusenum
    pendingapprovedrejectedwithdrawn
  • removedboolean

    Rejected after being approved: the brand took the creator out of the program.

  • payobjectnullable

    Pay the brand set for this creator over the program's (PATCH pay); null when the program's pay applies. acceptedAt is set by the creator's next action in the program.

    Show 2 child fields
    • overrideobject
      Show 3 child fields
      • rulesobject[]
      • capintegernullable

        The most one creator is paid per period, in cents; null or left out for no cap.

      • scheduleobject
    • acceptedAtstringnullable
  • payVersionintegernullable

    The program pay version this creator is paid on; null until admitted. Below the program's payVersion until their next action in the program accepts the newer pay.

  • payStatusenum

    past_due once a charge for this creator's program pay failed its last retry; back to current when a retry succeeds on an updated payment method.

    currentpast_due
  • agreementsRequiredboolean

    The brand invited the creator, who still has to accept the program's agreements; the application is approved once they do.

  • reviewedAtstringnullable
  • agreementsany[]

    On GET /v1/applications/:id as the creator while agreementsRequired: what joining accepts.

  • partnerFeeobjectnullable

    With agreements: the share of the creator's pay their partner takes, if any.

    Show 2 child fields
    • partnerstring
    • percentnumber
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
GET/v1/applications/:id
As creatorread

Get an application

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

Path parameters

  • idappl_…· required
Response20015 fieldsShow
  • idappl_…
  • programprog_…
  • creatorcrtr_…
  • statusenum
    pendingapprovedrejectedwithdrawn
  • removedboolean

    Rejected after being approved: the brand took the creator out of the program.

  • payobjectnullable

    Pay the brand set for this creator over the program's (PATCH pay); null when the program's pay applies. acceptedAt is set by the creator's next action in the program.

    Show 2 child fields
    • overrideobject
      Show 3 child fields
      • rulesobject[]
      • capintegernullable

        The most one creator is paid per period, in cents; null or left out for no cap.

      • scheduleobject
    • acceptedAtstringnullable
  • payVersionintegernullable

    The program pay version this creator is paid on; null until admitted. Below the program's payVersion until their next action in the program accepts the newer pay.

  • payStatusenum

    past_due once a charge for this creator's program pay failed its last retry; back to current when a retry succeeds on an updated payment method.

    currentpast_due
  • agreementsRequiredboolean

    The brand invited the creator, who still has to accept the program's agreements; the application is approved once they do.

  • reviewedAtstringnullable
  • agreementsany[]

    On GET /v1/applications/:id as the creator while agreementsRequired: what joining accepts.

  • partnerFeeobjectnullable

    With agreements: the share of the creator's pay their partner takes, if any.

    Show 2 child fields
    • partnerstring
    • percentnumber
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
POST/v1/applications
As creatorwrite

Invite a creator to a program, or apply as one

const { data } = await lucra.applications.create({
  body: { program: "prog_…" },
})

Body

  • programprog_…· required
  • creatorcrtr_…
Response20115 fieldsShow
  • idappl_…
  • programprog_…
  • creatorcrtr_…
  • statusenum
    pendingapprovedrejectedwithdrawn
  • removedboolean

    Rejected after being approved: the brand took the creator out of the program.

  • payobjectnullable

    Pay the brand set for this creator over the program's (PATCH pay); null when the program's pay applies. acceptedAt is set by the creator's next action in the program.

    Show 2 child fields
    • overrideobject
      Show 3 child fields
      • rulesobject[]
      • capintegernullable

        The most one creator is paid per period, in cents; null or left out for no cap.

      • scheduleobject
    • acceptedAtstringnullable
  • payVersionintegernullable

    The program pay version this creator is paid on; null until admitted. Below the program's payVersion until their next action in the program accepts the newer pay.

  • payStatusenum

    past_due once a charge for this creator's program pay failed its last retry; back to current when a retry succeeds on an updated payment method.

    currentpast_due
  • agreementsRequiredboolean

    The brand invited the creator, who still has to accept the program's agreements; the application is approved once they do.

  • reviewedAtstringnullable
  • agreementsany[]

    On GET /v1/applications/:id as the creator while agreementsRequired: what joining accepts.

  • partnerFeeobjectnullable

    With agreements: the share of the creator's pay their partner takes, if any.

    Show 2 child fields
    • partnerstring
    • percentnumber
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
PATCH/v1/applications/:id
As creatorwrite

Approve, reject or reopen an application, or set the creator's pay; as the creator, withdraw it or accept an invitation (approved)

const { data } = await lucra.applications.update({
  path: { id: "appl_…" },
  body: { status: "pending" },
})

Path parameters

  • idappl_…· required

Body

  • statusenum

    pending reopens a decided application for review; a creator withdraws their own with withdrawn, or joins a program they're invited to with approved, accepting its agreements.

    pendingapprovedrejectedwithdrawn
  • payobjectnullable

    Merged over the program's pay for this creator; null returns them to the program's pay.

    Show 3 child fields
    • rulesobject[]
    • capintegernullable

      The most one creator is paid per period, in cents; null or left out for no cap.

    • scheduleobject
  • versioninteger
Response20015 fieldsShow
  • idappl_…
  • programprog_…
  • creatorcrtr_…
  • statusenum
    pendingapprovedrejectedwithdrawn
  • removedboolean

    Rejected after being approved: the brand took the creator out of the program.

  • payobjectnullable

    Pay the brand set for this creator over the program's (PATCH pay); null when the program's pay applies. acceptedAt is set by the creator's next action in the program.

    Show 2 child fields
    • overrideobject
      Show 3 child fields
      • rulesobject[]
      • capintegernullable

        The most one creator is paid per period, in cents; null or left out for no cap.

      • scheduleobject
    • acceptedAtstringnullable
  • payVersionintegernullable

    The program pay version this creator is paid on; null until admitted. Below the program's payVersion until their next action in the program accepts the newer pay.

  • payStatusenum

    past_due once a charge for this creator's program pay failed its last retry; back to current when a retry succeeds on an updated payment method.

    currentpast_due
  • agreementsRequiredboolean

    The brand invited the creator, who still has to accept the program's agreements; the application is approved once they do.

  • reviewedAtstringnullable
  • agreementsany[]

    On GET /v1/applications/:id as the creator while agreementsRequired: what joining accepts.

  • partnerFeeobjectnullable

    With agreements: the share of the creator's pay their partner takes, if any.

    Show 2 child fields
    • partnerstring
    • percentnumber
  • versioninteger

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

  • createdAtstring
  • updatedAtstring

Balance

GET/v1/balance
As creatorread

Get the balance: the account's commissions, or a creator's earnings

const { data } = await lucra.balance.retrieve()
Response2003 fieldsShow
  • balancesobject[]
    Show 9 child fields
    • currencystring

      Lowercase ISO 4217 code, e.g. usd.

    • availableinteger

      A creator's earnings ready to send to their Stripe balance, sent within minutes once their identity is verified; 0 for an account.

    • pendinginteger

      A creator's earnings waiting on the brand's payment; 0 for an account.

    • heldinteger

      A creator's earnings held while a dispute is reviewed; 0 for an account.

    • paidinteger

      A creator's earnings sent to their Stripe balance, all time; 0 for an account.

    • spentinteger

      Deprecated: always 0.

    • refundableinteger

      Deprecated: always 0.

    • withdrawableinteger

      In this balance's Stripe account (a creator's, or an account's commissions), ready to withdraw with POST /v1/withdrawals.

    • instantWithdrawableinteger

      How much of withdrawable can go out instantly, to a debit card.

  • depositMethodsenum[]

    Deprecated: always empty.

    bankcard
  • withdrawalFeesobject

    What a withdrawal costs; it comes out of the amount.

    Show 2 child fields
    • instantobject
      Show 2 child fields
      • percentnumber

        A percent, e.g. 1.5 for 1.5%.

      • minimuminteger

        The least an instant withdrawal costs.

    • crossBorderobject

      Added outside the US; 0 in the US.

      Show 1 child field
      • percentnumber

        A percent, e.g. 1.5 for 1.5%.

GET/v1/balance/tax
As creatorread

Get US tax reporting: whether a taxpayer ID is on file, and what Lucra paid each year

const { data } = await lucra.balance.tax.retrieve()
Response2005 fieldsShow
  • taxIdenum

    The SSN or EIN on the Stripe account: verified by Stripe, provided, flagged (failed) or missing.

    missingprovidedverifiedfailed
  • requiredboolean

    True when withdrawals wait for a taxpayer ID (US, paid at least threshold this year): add it with POST /v1/connections (provider stripe).

  • thresholdinteger

    What Lucra can pay a US payee in a calendar year before a taxpayer ID is needed, in cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • yearsobject[]

    Newest first.

    Show 2 child fields
    • yearinteger
    • reportableinteger

      What Lucra paid this balance that year (UTC), in cents: transfers less fees taken back.

GET/v1/balance/transactions
read

List every ledger line on the account

const { data } = await lucra.balance.transactions.list({
  query: { type: "…" },
})

Query parameters

  • typestring

    Comma-separated transaction types, e.g. creator_earning,platform_fee.

  • programprog_…

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 15 fields each, and nextCursorShow
  • idtxn_…
  • typestring
  • statusstring
  • amountinteger

    Signed, in cents: positive adds to the balance.

  • feeinteger

    In cents.

  • netinteger

    Signed, in cents: amount less fee.

  • balancenumbernullable
  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • descriptionstringnullable

    What it is, e.g. Creator payment.

  • memostringnullable
  • sourcestring
  • counterpartyobject
    Show 3 child fields
    • typeenum
      partnerpayment_methodcreatorplatformaccount
    • idcrtr_…nullable

      Set when the other side is a creator.

    • namestringnullable
  • campaigncamp_…nullable
  • programprog_…nullable
  • occurredAtstring

Brands

GET/v1/brands
read

List the brands this key reaches, and a partner's brands whose relationship ended

const { data } = await lucra.brands.list({
  query: { status: "active" },
})

Query parameters

  • statusenum
    activeended

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 21 fields each, and nextCursorShow
  • idacct_…
  • typeenum
    brandpartner
  • namestring
  • statusenum

    ended: a brand whose relationship with your partner account ended; it reads, but no longer changes.

    activeended
  • managedByacct_…nullable
  • brandFeeobjectnullable

    The managing partner's own fee on this brand; null when it's on the partner's default (GET /v1/account partner.brandFee).

    Show 2 child fields
    • ofenum
      ad_spendgmv
    • percentnumber
  • partnerobjectnullable

    A partner's take rates; null for a brand.

    Show 2 child fields
    • creatorTakeRateobjectnullable
      Show 1 child field
      • percentnumber
    • brandFeeobjectnullable
      Show 2 child fields
      • ofenum
        ad_spendgmv
      • percentnumber
  • emailstringnullable
  • phonestringnullable
  • profilePicturefile_…nullable
  • imageobjectnullable

    The account's logo, with a short-lived url.

    Show 5 child fields
    • fileIdfile_…nullable
    • urlstring
    • widthnumbernullable
    • heightnumbernullable
    • blurHashstringnullable
  • paymentMethodobjectnullable

    A brand's payment method; null means none yet (add one with POST /v1/connections, provider card), and always null for a partner.

    Show 3 child fields
    • statusstring
      active
    • brandstringnullable
    • last4stringnullable
  • payoutsobject

    Where it's paid: verified identity lets earnings reach its balance; a bank account is asked for on the first withdrawal. Set up with POST /v1/connections (provider stripe).

    Show 2 child fields
    • identityobject
      Show 1 child field
      • statusenum
        requiredpendingverified
    • bankAccountobjectnullable
      Show 1 child field
      • statusenum
        missingadded
  • brandsobjectnullable

    The brands a partner key reaches; null on a managed brand.

    Show 1 child field
    • countinteger
  • creatorsobjectnullable

    The account's creators and roster; null on a managed brand.

    Show 1 child field
    • countinteger
  • descriptionstringnullable
  • recruitmentobject
    Show 2 child fields
    • headlinestringnullable
    • descriptionstringnullable
  • listingobjectnullable

    A partner's marketplace listing; null for a brand.

    Show 4 child fields
    • listedboolean
    • headlinestringnullable
    • categoriesstring[]
    • registeredAtstringnullable
  • versioninteger
  • createdAtstring
  • updatedAtstring
GET/v1/brands/:id
read

Get a brand

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

Path parameters

  • idacct_…· required
Response20021 fieldsShow
  • idacct_…
  • typeenum
    brandpartner
  • namestring
  • statusenum

    ended: a brand whose relationship with your partner account ended; it reads, but no longer changes.

    activeended
  • managedByacct_…nullable
  • brandFeeobjectnullable

    The managing partner's own fee on this brand; null when it's on the partner's default (GET /v1/account partner.brandFee).

    Show 2 child fields
    • ofenum
      ad_spendgmv
    • percentnumber
  • partnerobjectnullable

    A partner's take rates; null for a brand.

    Show 2 child fields
    • creatorTakeRateobjectnullable
      Show 1 child field
      • percentnumber
    • brandFeeobjectnullable
      Show 2 child fields
      • ofenum
        ad_spendgmv
      • percentnumber
  • emailstringnullable
  • phonestringnullable
  • profilePicturefile_…nullable
  • imageobjectnullable

    The account's logo, with a short-lived url.

    Show 5 child fields
    • fileIdfile_…nullable
    • urlstring
    • widthnumbernullable
    • heightnumbernullable
    • blurHashstringnullable
  • paymentMethodobjectnullable

    A brand's payment method; null means none yet (add one with POST /v1/connections, provider card), and always null for a partner.

    Show 3 child fields
    • statusstring
      active
    • brandstringnullable
    • last4stringnullable
  • payoutsobject

    Where it's paid: verified identity lets earnings reach its balance; a bank account is asked for on the first withdrawal. Set up with POST /v1/connections (provider stripe).

    Show 2 child fields
    • identityobject
      Show 1 child field
      • statusenum
        requiredpendingverified
    • bankAccountobjectnullable
      Show 1 child field
      • statusenum
        missingadded
  • brandsobjectnullable

    The brands a partner key reaches; null on a managed brand.

    Show 1 child field
    • countinteger
  • creatorsobjectnullable

    The account's creators and roster; null on a managed brand.

    Show 1 child field
    • countinteger
  • descriptionstringnullable
  • recruitmentobject
    Show 2 child fields
    • headlinestringnullable
    • descriptionstringnullable
  • listingobjectnullable

    A partner's marketplace listing; null for a brand.

    Show 4 child fields
    • listedboolean
    • headlinestringnullable
    • categoriesstring[]
    • registeredAtstringnullable
  • versioninteger
  • createdAtstring
  • updatedAtstring
POST/v1/brands
write

Create a brand a partner manages

const { data } = await lucra.brands.create({
  body: { name: "…" },
})

Body

  • namestring· required
  • brandFeeobject
    Show 2 child fields
    • ofenum· required
      ad_spendgmv
    • percentnumber· required
  • emailstring
  • phonestring
Response20121 fieldsShow
  • idacct_…
  • typeenum
    brandpartner
  • namestring
  • statusenum

    ended: a brand whose relationship with your partner account ended; it reads, but no longer changes.

    activeended
  • managedByacct_…nullable
  • brandFeeobjectnullable

    The managing partner's own fee on this brand; null when it's on the partner's default (GET /v1/account partner.brandFee).

    Show 2 child fields
    • ofenum
      ad_spendgmv
    • percentnumber
  • partnerobjectnullable

    A partner's take rates; null for a brand.

    Show 2 child fields
    • creatorTakeRateobjectnullable
      Show 1 child field
      • percentnumber
    • brandFeeobjectnullable
      Show 2 child fields
      • ofenum
        ad_spendgmv
      • percentnumber
  • emailstringnullable
  • phonestringnullable
  • profilePicturefile_…nullable
  • imageobjectnullable

    The account's logo, with a short-lived url.

    Show 5 child fields
    • fileIdfile_…nullable
    • urlstring
    • widthnumbernullable
    • heightnumbernullable
    • blurHashstringnullable
  • paymentMethodobjectnullable

    A brand's payment method; null means none yet (add one with POST /v1/connections, provider card), and always null for a partner.

    Show 3 child fields
    • statusstring
      active
    • brandstringnullable
    • last4stringnullable
  • payoutsobject

    Where it's paid: verified identity lets earnings reach its balance; a bank account is asked for on the first withdrawal. Set up with POST /v1/connections (provider stripe).

    Show 2 child fields
    • identityobject
      Show 1 child field
      • statusenum
        requiredpendingverified
    • bankAccountobjectnullable
      Show 1 child field
      • statusenum
        missingadded
  • brandsobjectnullable

    The brands a partner key reaches; null on a managed brand.

    Show 1 child field
    • countinteger
  • creatorsobjectnullable

    The account's creators and roster; null on a managed brand.

    Show 1 child field
    • countinteger
  • descriptionstringnullable
  • recruitmentobject
    Show 2 child fields
    • headlinestringnullable
    • descriptionstringnullable
  • listingobjectnullable

    A partner's marketplace listing; null for a brand.

    Show 4 child fields
    • listedboolean
    • headlinestringnullable
    • categoriesstring[]
    • registeredAtstringnullable
  • versioninteger
  • createdAtstring
  • updatedAtstring
PATCH/v1/brands/:id
write

Update a brand a partner manages

const { data } = await lucra.brands.update({
  path: { id: "acct_…" },
  body: { brandFee: {} },
})

Path parameters

  • idacct_…· required

Body

  • brandFeeobjectnullable
    Show 2 child fields
    • ofenum· required
      ad_spendgmv
    • percentnumber· required
  • profilePicturefile_…nullable
  • namestring
  • descriptionstringnullable
  • recruitmentobject
    Show 2 child fields
    • headlinestringnullable
    • descriptionstringnullable
  • versioninteger
Response20021 fieldsShow
  • idacct_…
  • typeenum
    brandpartner
  • namestring
  • statusenum

    ended: a brand whose relationship with your partner account ended; it reads, but no longer changes.

    activeended
  • managedByacct_…nullable
  • brandFeeobjectnullable

    The managing partner's own fee on this brand; null when it's on the partner's default (GET /v1/account partner.brandFee).

    Show 2 child fields
    • ofenum
      ad_spendgmv
    • percentnumber
  • partnerobjectnullable

    A partner's take rates; null for a brand.

    Show 2 child fields
    • creatorTakeRateobjectnullable
      Show 1 child field
      • percentnumber
    • brandFeeobjectnullable
      Show 2 child fields
      • ofenum
        ad_spendgmv
      • percentnumber
  • emailstringnullable
  • phonestringnullable
  • profilePicturefile_…nullable
  • imageobjectnullable

    The account's logo, with a short-lived url.

    Show 5 child fields
    • fileIdfile_…nullable
    • urlstring
    • widthnumbernullable
    • heightnumbernullable
    • blurHashstringnullable
  • paymentMethodobjectnullable

    A brand's payment method; null means none yet (add one with POST /v1/connections, provider card), and always null for a partner.

    Show 3 child fields
    • statusstring
      active
    • brandstringnullable
    • last4stringnullable
  • payoutsobject

    Where it's paid: verified identity lets earnings reach its balance; a bank account is asked for on the first withdrawal. Set up with POST /v1/connections (provider stripe).

    Show 2 child fields
    • identityobject
      Show 1 child field
      • statusenum
        requiredpendingverified
    • bankAccountobjectnullable
      Show 1 child field
      • statusenum
        missingadded
  • brandsobjectnullable

    The brands a partner key reaches; null on a managed brand.

    Show 1 child field
    • countinteger
  • creatorsobjectnullable

    The account's creators and roster; null on a managed brand.

    Show 1 child field
    • countinteger
  • descriptionstringnullable
  • recruitmentobject
    Show 2 child fields
    • headlinestringnullable
    • descriptionstringnullable
  • listingobjectnullable

    A partner's marketplace listing; null for a brand.

    Show 4 child fields
    • listedboolean
    • headlinestringnullable
    • categoriesstring[]
    • registeredAtstringnullable
  • versioninteger
  • createdAtstring
  • updatedAtstring

Campaigns

POST/v1/campaigns
write

Create and launch a campaign

const { data } = await lucra.campaigns.create({
  body: { name: "…", destination: {}, budget: {} },
})

Body

  • namestring· required
  • objectiveenum

    Defaults to the account's (GET /v1/ad-defaults), conversions unless set.

    conversionstrafficawareness
  • destinationobject· required
    Show 2 child fields
    • typestring· required
    • valuestring
  • budgetobject· required
  • billingLimitinteger

    Stop spending once the campaign has spent this much, in cents.

  • scheduleobject· required
    Show 2 child fields
    • startDatestring· required
    • endDatestring
  • scheduledLaunchAtstringnullable

    Turn the campaign on by itself at this time; null cancels. Until then it stays paused, and a create with a future time doesn't launch now.

  • audienceobject
    Show 5 child fields
    • countriesenum[]
      USCAGBAUNZATBECZDKFIFRDEGRHUIEITNLNOPLPTROESSECHBRMXJPKRSGZASAAE
    • ageMininteger
    • ageMaxinteger
    • genderenum
      allfemalemale
    • expandboolean

      Meta: let it reach people beyond this audience when it expects better results (Advantage+ audience).

  • creativessub_…[]· required
  • adSetsobject[]

    How the creatives are split into ad sets; by default one ad per creative, packed into as few ad sets as the platform allows.

    Show 4 child fields
    • idadset_…

      An adset_ ID from the campaign's adSets, to keep that ad set across edits; omit to add one.

    • namestring
    • budgetSharenumber

      Its share of the campaign budget, in percent; shares add up to 100.

    • adsobject[]· required
      Show 3 child fields
      • idad_…

        An ad_ ID from the ad set's ads, to keep it.

      • creativesub_…· required
      • namestring
  • adobject· required
    Show 3 child fields
    • primaryTextstring· required
    • callToActionenum· required
      book_nowcontact_usdownloadlearn_moreshop_nowsign_upsubscribe
    • headlinestring
  • optimizationEventenum
    installpurchasesubscriptiontrial_startinitiate_checkoutadd_to_cartview_contentcomplete_registrationleadcontact
  • settingsobject
    Show 10 child fields
    • pixelstring

      Meta, TikTok or Snapchat pixel ID in that platform's own format.

    • conversionstring

      Meta custom conversion ID, or Google conversion action resource name.

    • conversionGoalstring

      Google custom conversion goal resource name.

    • revenueConversionstring

      Google conversion action that reports revenue, for revenue-share campaigns.

    • appstring

      Meta or TikTok registered app ID, for app store destinations.

    • logostring

      Google: square logo asset resource name and business name, for website destinations.

    • businessNamestring
    • targetCpainteger

      Google app campaigns: target cost per action in cents.

    • locationsstring[]

      TikTok location IDs.

    • budgetOptimizationenum

      TikTok only: ad_set (the default) gives each ad set its share of the budget; campaign lets TikTok's campaign budget optimization move one campaign budget (at least $20) between ad sets, ignoring the split. Fixed once the campaign is set up on TikTok.

      ad_setcampaign
  • trackingobject
    Show 4 child fields
    • urlParametersstring

      Added to every click's landing page: Meta's URL parameters, Google's final URL suffix, appended to TikTok's landing page.

    • trackingUrlTemplatestring

      Google: the tracking template clicks go through.

    • clickTrackingUrlstring

      TikTok campaigns set up before Smart+ only (Smart+ ads have no trackers): your measurement partner's click tracker.

    • impressionTrackingUrlstring

      TikTok campaigns set up before Smart+ only: your measurement partner's impression tracker.

  • attributionobject

    How creators' revenue-share or per-lead pay is counted: the ad platform's reported results (platform) or your Lucra pixel's conversions from the ad's link (lucra; the default when your pixel is verified and the destination is a website). Fixed once the campaign is on its ad platform; ad-spend pay is always platform.

    Show 2 child fields
    • sourceenum· required
      platformlucra
    • conversionconv_…

      With lucra: the conv_ whose matches count (GET /v1/conversions). Defaults to an active purchase (revenue pay) or lead (per-lead pay) conversion, created if you have none.

  • connectionconn_…· required
  • identityenum

    Run ads under the brand's identity (default) or the creator's.

    brandcreator
  • launchboolean

    Every new campaign is set up on its ad platform right away, paused (status processing until done). launch (the default) also turns it on; false, or a future scheduledLaunchAt, leaves it paused.

Response20129 fieldsShow
  • idcamp_…
  • namestring
  • statusenum

    processing while it's set up or changed on the ad platform; in_review while the platform reviews its ads; then live or paused as the platform reports.

    draftprocessingin_reviewlivepausedneeds_attentionarchived
  • objectiveenum
    conversionsawarenesstrafficengagementleadsapp_promotionsales
  • connectionconn_…nullable
  • platformstringnullable
  • destinationobject
    Show 2 child fields
    • typeenum
      websitemobile_appios_app_storegoogle_playdeep_link
    • valuestringnullable
  • budgetobject

    In cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • scheduleobject
    Show 2 child fields
    • startDatestring
    • endDatestringnullable
  • scheduledLaunchAtstringnullable
  • audienceobject
    Show 5 child fields
    • countriesenum[]
      USCAGBAUNZATBECZDKFIFRDEGRHUIEITNLNOPLPTROESSECHBRMXJPKRSGZASAAE
    • ageMinnumbernullable
    • ageMaxnumbernullable
    • genderenumnullable
      allfemalemale
    • expandboolean
  • adobject
    Show 3 child fields
    • primaryTextstringnullable
    • callToActionenumnullable
      book_nowcontact_usdownloadlearn_moreshop_nowsign_upsubscribe
    • headlinestringnullable
  • optimizationEventenumnullable
    installpurchasesubscriptiontrial_startinitiate_checkoutadd_to_cartview_contentcomplete_registrationleadcontact
  • settingsany
  • trackingany
  • identityenum
    brandcreator
  • creativessub_…[]
  • adSetsobject[]

    The campaign's ad sets as planned: each one's share of the budget and its ads. Names can use {{variables}}.

    Show 4 child fields
    • idadset_…
    • namestring
    • budgetSharenumber

      In percent.

    • adsobject[]
      Show 3 child fields
      • idad_…
      • creativesub_…
      • namestring
  • billingLimitnumbernullable

    The campaign stops spending at this amount, in cents.

  • creatorPayobject

    What creators earn, as their programs' pay set it when the campaign was saved.

    Show 5 child fields
    • modelenum
      ad_spendattributed_revenuelead
    • creatorSharenumbernullable

      The creator's share of spend or revenue, in percent.

    • leadAmountintegernullable

      What a creator earns per lead, in cents.

    • capintegernullable

      The most a creator earns from the campaign, in cents.

    • revenueEventstringnullable
  • attributionobject

    How creator pay is counted: the ad platform's results (platform) or the Lucra pixel's matches of conversion (lucra).

    Show 2 child fields
    • sourceenum
      platformlucra
    • conversionconv_…nullable
  • platformsobject[]

    How each ad platform reports the campaign.

    Show 3 child fields
    • platformstring
    • statusstring
    • errorstringnullable
  • pendingChangeobjectnullable

    A change still settling: waiting for the brand's approval (PATCH pendingChange: "approved"), or running on the ad platforms.

    Show 2 child fields
    • actionstring
    • statusenum
      awaiting_approvalin_progress
  • partnerApprovalobjectnullable
    Show 4 child fields
    • statusenum
      draftpendingapprovedrejectedchanges_requested
    • notestringnullable
    • requestedAtstringnullable
    • reviewedAtstringnullable
  • createdByPartneracct_…nullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
POST/v1/campaigns/:id/copies
write

Copy a campaign with its ad sets and ads, as a new campaign

const { data } = await lucra.campaigns.copies.create({
  path: { id: "camp_…" },
  body: { name: "…" },
})

Path parameters

  • idcamp_…· required

Body

  • namestring

    Defaults to the source's name with " (copy)".

  • launchboolean

    Turn the copy on once it's set up, or (default) leave it paused on the platform, to launch with PATCH status "live".

Response20129 fieldsShow
  • idcamp_…
  • namestring
  • statusenum

    processing while it's set up or changed on the ad platform; in_review while the platform reviews its ads; then live or paused as the platform reports.

    draftprocessingin_reviewlivepausedneeds_attentionarchived
  • objectiveenum
    conversionsawarenesstrafficengagementleadsapp_promotionsales
  • connectionconn_…nullable
  • platformstringnullable
  • destinationobject
    Show 2 child fields
    • typeenum
      websitemobile_appios_app_storegoogle_playdeep_link
    • valuestringnullable
  • budgetobject

    In cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • scheduleobject
    Show 2 child fields
    • startDatestring
    • endDatestringnullable
  • scheduledLaunchAtstringnullable
  • audienceobject
    Show 5 child fields
    • countriesenum[]
      USCAGBAUNZATBECZDKFIFRDEGRHUIEITNLNOPLPTROESSECHBRMXJPKRSGZASAAE
    • ageMinnumbernullable
    • ageMaxnumbernullable
    • genderenumnullable
      allfemalemale
    • expandboolean
  • adobject
    Show 3 child fields
    • primaryTextstringnullable
    • callToActionenumnullable
      book_nowcontact_usdownloadlearn_moreshop_nowsign_upsubscribe
    • headlinestringnullable
  • optimizationEventenumnullable
    installpurchasesubscriptiontrial_startinitiate_checkoutadd_to_cartview_contentcomplete_registrationleadcontact
  • settingsany
  • trackingany
  • identityenum
    brandcreator
  • creativessub_…[]
  • adSetsobject[]

    The campaign's ad sets as planned: each one's share of the budget and its ads. Names can use {{variables}}.

    Show 4 child fields
    • idadset_…
    • namestring
    • budgetSharenumber

      In percent.

    • adsobject[]
      Show 3 child fields
      • idad_…
      • creativesub_…
      • namestring
  • billingLimitnumbernullable

    The campaign stops spending at this amount, in cents.

  • creatorPayobject

    What creators earn, as their programs' pay set it when the campaign was saved.

    Show 5 child fields
    • modelenum
      ad_spendattributed_revenuelead
    • creatorSharenumbernullable

      The creator's share of spend or revenue, in percent.

    • leadAmountintegernullable

      What a creator earns per lead, in cents.

    • capintegernullable

      The most a creator earns from the campaign, in cents.

    • revenueEventstringnullable
  • attributionobject

    How creator pay is counted: the ad platform's results (platform) or the Lucra pixel's matches of conversion (lucra).

    Show 2 child fields
    • sourceenum
      platformlucra
    • conversionconv_…nullable
  • platformsobject[]

    How each ad platform reports the campaign.

    Show 3 child fields
    • platformstring
    • statusstring
    • errorstringnullable
  • pendingChangeobjectnullable

    A change still settling: waiting for the brand's approval (PATCH pendingChange: "approved"), or running on the ad platforms.

    Show 2 child fields
    • actionstring
    • statusenum
      awaiting_approvalin_progress
  • partnerApprovalobjectnullable
    Show 4 child fields
    • statusenum
      draftpendingapprovedrejectedchanges_requested
    • notestringnullable
    • requestedAtstringnullable
    • reviewedAtstringnullable
  • createdByPartneracct_…nullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
GET/v1/campaigns
read

List campaigns

const { data } = await lucra.campaigns.list({
  query: { status: "draft" },
})

Query parameters

  • statusenum
    draftlivepausedneeds_attentionarchived
  • platformenum
    metatiktokgooglesnapchat
  • connectionconn_…

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 29 fields each, and nextCursorShow
  • idcamp_…
  • namestring
  • statusenum

    processing while it's set up or changed on the ad platform; in_review while the platform reviews its ads; then live or paused as the platform reports.

    draftprocessingin_reviewlivepausedneeds_attentionarchived
  • objectiveenum
    conversionsawarenesstrafficengagementleadsapp_promotionsales
  • connectionconn_…nullable
  • platformstringnullable
  • destinationobject
    Show 2 child fields
    • typeenum
      websitemobile_appios_app_storegoogle_playdeep_link
    • valuestringnullable
  • budgetobject

    In cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • scheduleobject
    Show 2 child fields
    • startDatestring
    • endDatestringnullable
  • scheduledLaunchAtstringnullable
  • audienceobject
    Show 5 child fields
    • countriesenum[]
      USCAGBAUNZATBECZDKFIFRDEGRHUIEITNLNOPLPTROESSECHBRMXJPKRSGZASAAE
    • ageMinnumbernullable
    • ageMaxnumbernullable
    • genderenumnullable
      allfemalemale
    • expandboolean
  • adobject
    Show 3 child fields
    • primaryTextstringnullable
    • callToActionenumnullable
      book_nowcontact_usdownloadlearn_moreshop_nowsign_upsubscribe
    • headlinestringnullable
  • optimizationEventenumnullable
    installpurchasesubscriptiontrial_startinitiate_checkoutadd_to_cartview_contentcomplete_registrationleadcontact
  • settingsany
  • trackingany
  • identityenum
    brandcreator
  • creativessub_…[]
  • adSetsobject[]

    The campaign's ad sets as planned: each one's share of the budget and its ads. Names can use {{variables}}.

    Show 4 child fields
    • idadset_…
    • namestring
    • budgetSharenumber

      In percent.

    • adsobject[]
      Show 3 child fields
      • idad_…
      • creativesub_…
      • namestring
  • billingLimitnumbernullable

    The campaign stops spending at this amount, in cents.

  • creatorPayobject

    What creators earn, as their programs' pay set it when the campaign was saved.

    Show 5 child fields
    • modelenum
      ad_spendattributed_revenuelead
    • creatorSharenumbernullable

      The creator's share of spend or revenue, in percent.

    • leadAmountintegernullable

      What a creator earns per lead, in cents.

    • capintegernullable

      The most a creator earns from the campaign, in cents.

    • revenueEventstringnullable
  • attributionobject

    How creator pay is counted: the ad platform's results (platform) or the Lucra pixel's matches of conversion (lucra).

    Show 2 child fields
    • sourceenum
      platformlucra
    • conversionconv_…nullable
  • platformsobject[]

    How each ad platform reports the campaign.

    Show 3 child fields
    • platformstring
    • statusstring
    • errorstringnullable
  • pendingChangeobjectnullable

    A change still settling: waiting for the brand's approval (PATCH pendingChange: "approved"), or running on the ad platforms.

    Show 2 child fields
    • actionstring
    • statusenum
      awaiting_approvalin_progress
  • partnerApprovalobjectnullable
    Show 4 child fields
    • statusenum
      draftpendingapprovedrejectedchanges_requested
    • notestringnullable
    • requestedAtstringnullable
    • reviewedAtstringnullable
  • createdByPartneracct_…nullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
GET/v1/campaigns/:id
read

Get a campaign

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

Path parameters

  • idcamp_…· required
Response20029 fieldsShow
  • idcamp_…
  • namestring
  • statusenum

    processing while it's set up or changed on the ad platform; in_review while the platform reviews its ads; then live or paused as the platform reports.

    draftprocessingin_reviewlivepausedneeds_attentionarchived
  • objectiveenum
    conversionsawarenesstrafficengagementleadsapp_promotionsales
  • connectionconn_…nullable
  • platformstringnullable
  • destinationobject
    Show 2 child fields
    • typeenum
      websitemobile_appios_app_storegoogle_playdeep_link
    • valuestringnullable
  • budgetobject

    In cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • scheduleobject
    Show 2 child fields
    • startDatestring
    • endDatestringnullable
  • scheduledLaunchAtstringnullable
  • audienceobject
    Show 5 child fields
    • countriesenum[]
      USCAGBAUNZATBECZDKFIFRDEGRHUIEITNLNOPLPTROESSECHBRMXJPKRSGZASAAE
    • ageMinnumbernullable
    • ageMaxnumbernullable
    • genderenumnullable
      allfemalemale
    • expandboolean
  • adobject
    Show 3 child fields
    • primaryTextstringnullable
    • callToActionenumnullable
      book_nowcontact_usdownloadlearn_moreshop_nowsign_upsubscribe
    • headlinestringnullable
  • optimizationEventenumnullable
    installpurchasesubscriptiontrial_startinitiate_checkoutadd_to_cartview_contentcomplete_registrationleadcontact
  • settingsany
  • trackingany
  • identityenum
    brandcreator
  • creativessub_…[]
  • adSetsobject[]

    The campaign's ad sets as planned: each one's share of the budget and its ads. Names can use {{variables}}.

    Show 4 child fields
    • idadset_…
    • namestring
    • budgetSharenumber

      In percent.

    • adsobject[]
      Show 3 child fields
      • idad_…
      • creativesub_…
      • namestring
  • billingLimitnumbernullable

    The campaign stops spending at this amount, in cents.

  • creatorPayobject

    What creators earn, as their programs' pay set it when the campaign was saved.

    Show 5 child fields
    • modelenum
      ad_spendattributed_revenuelead
    • creatorSharenumbernullable

      The creator's share of spend or revenue, in percent.

    • leadAmountintegernullable

      What a creator earns per lead, in cents.

    • capintegernullable

      The most a creator earns from the campaign, in cents.

    • revenueEventstringnullable
  • attributionobject

    How creator pay is counted: the ad platform's results (platform) or the Lucra pixel's matches of conversion (lucra).

    Show 2 child fields
    • sourceenum
      platformlucra
    • conversionconv_…nullable
  • platformsobject[]

    How each ad platform reports the campaign.

    Show 3 child fields
    • platformstring
    • statusstring
    • errorstringnullable
  • pendingChangeobjectnullable

    A change still settling: waiting for the brand's approval (PATCH pendingChange: "approved"), or running on the ad platforms.

    Show 2 child fields
    • actionstring
    • statusenum
      awaiting_approvalin_progress
  • partnerApprovalobjectnullable
    Show 4 child fields
    • statusenum
      draftpendingapprovedrejectedchanges_requested
    • notestringnullable
    • requestedAtstringnullable
    • reviewedAtstringnullable
  • createdByPartneracct_…nullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
PATCH/v1/campaigns/:id
write

Change a campaign, its ad sets' budgets, or its status: launch, pause, resume, retry or archive

const { data } = await lucra.campaigns.update({
  path: { id: "camp_…" },
  body: { name: "…" },
})

Path parameters

  • idcamp_…· required

Body

  • namestring
  • objectiveenum

    conversions (default) optimizes for optimizationEvent; traffic (link clicks) and awareness (reach) run on Meta websites (beta).

    conversionstrafficawareness
  • destinationobject
    Show 2 child fields
    • typestring· required
    • valuestring
  • budgetobject
  • billingLimitinteger

    Stop spending once the campaign has spent this much, in cents.

  • scheduleobject
    Show 2 child fields
    • startDatestring· required
    • endDatestring
  • scheduledLaunchAtstringnullable

    Turn the campaign on by itself at this time; null cancels. Until then it stays paused, and a create with a future time doesn't launch now.

  • audienceobject
    Show 5 child fields
    • countriesenum[]
      USCAGBAUNZATBECZDKFIFRDEGRHUIEITNLNOPLPTROESSECHBRMXJPKRSGZASAAE
    • ageMininteger
    • ageMaxinteger
    • genderenum
      allfemalemale
    • expandboolean

      Meta: let it reach people beyond this audience when it expects better results (Advantage+ audience).

  • creativessub_…[]
  • adSetsobject[]

    How the creatives are split into ad sets; by default one ad per creative, packed into as few ad sets as the platform allows.

    Show 4 child fields
    • idadset_…

      An adset_ ID from the campaign's adSets, to keep that ad set across edits; omit to add one.

    • namestring
    • budgetSharenumber

      Its share of the campaign budget, in percent; shares add up to 100.

    • adsobject[]· required
      Show 3 child fields
      • idad_…

        An ad_ ID from the ad set's ads, to keep it.

      • creativesub_…· required
      • namestring
  • adobject
    Show 3 child fields
    • primaryTextstring· required
    • callToActionenum· required
      book_nowcontact_usdownloadlearn_moreshop_nowsign_upsubscribe
    • headlinestring
  • optimizationEventenum
    installpurchasesubscriptiontrial_startinitiate_checkoutadd_to_cartview_contentcomplete_registrationleadcontact
  • settingsobject
    Show 10 child fields
    • pixelstring

      Meta, TikTok or Snapchat pixel ID in that platform's own format.

    • conversionstring

      Meta custom conversion ID, or Google conversion action resource name.

    • conversionGoalstring

      Google custom conversion goal resource name.

    • revenueConversionstring

      Google conversion action that reports revenue, for revenue-share campaigns.

    • appstring

      Meta or TikTok registered app ID, for app store destinations.

    • logostring

      Google: square logo asset resource name and business name, for website destinations.

    • businessNamestring
    • targetCpainteger

      Google app campaigns: target cost per action in cents.

    • locationsstring[]

      TikTok location IDs.

    • budgetOptimizationenum

      TikTok only: ad_set (the default) gives each ad set its share of the budget; campaign lets TikTok's campaign budget optimization move one campaign budget (at least $20) between ad sets, ignoring the split. Fixed once the campaign is set up on TikTok.

      ad_setcampaign
  • trackingobject
    Show 4 child fields
    • urlParametersstring

      Added to every click's landing page: Meta's URL parameters, Google's final URL suffix, appended to TikTok's landing page.

    • trackingUrlTemplatestring

      Google: the tracking template clicks go through.

    • clickTrackingUrlstring

      TikTok campaigns set up before Smart+ only (Smart+ ads have no trackers): your measurement partner's click tracker.

    • impressionTrackingUrlstring

      TikTok campaigns set up before Smart+ only: your measurement partner's impression tracker.

  • attributionobject

    How creators' revenue-share or per-lead pay is counted: the ad platform's reported results (platform) or your Lucra pixel's conversions from the ad's link (lucra; the default when your pixel is verified and the destination is a website). Fixed once the campaign is on its ad platform; ad-spend pay is always platform.

    Show 2 child fields
    • sourceenum· required
      platformlucra
    • conversionconv_…

      With lucra: the conv_ whose matches count (GET /v1/conversions). Defaults to an active purchase (revenue pay) or lead (per-lead pay) conversion, created if you have none.

  • statusenum

    live turns a paused campaign on, creating it on its ad platform first if it never was; on a launch that needs attention it retries.

    pausedlivearchived
  • adSetBudgetsobject[]

    New budgets, in cents, for launched Meta or Snapchat ad sets, by their IDs from the campaign's adSets (GET /v1/campaigns/:id).

    Show 2 child fields
    • idadset_…· required
    • budgetinteger· required
  • pendingChangestring

    As the brand: approves the change a partner made, which pendingChange shows awaiting approval.

    approved
  • versioninteger
Response20029 fieldsShow
  • idcamp_…
  • namestring
  • statusenum

    processing while it's set up or changed on the ad platform; in_review while the platform reviews its ads; then live or paused as the platform reports.

    draftprocessingin_reviewlivepausedneeds_attentionarchived
  • objectiveenum
    conversionsawarenesstrafficengagementleadsapp_promotionsales
  • connectionconn_…nullable
  • platformstringnullable
  • destinationobject
    Show 2 child fields
    • typeenum
      websitemobile_appios_app_storegoogle_playdeep_link
    • valuestringnullable
  • budgetobject

    In cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • scheduleobject
    Show 2 child fields
    • startDatestring
    • endDatestringnullable
  • scheduledLaunchAtstringnullable
  • audienceobject
    Show 5 child fields
    • countriesenum[]
      USCAGBAUNZATBECZDKFIFRDEGRHUIEITNLNOPLPTROESSECHBRMXJPKRSGZASAAE
    • ageMinnumbernullable
    • ageMaxnumbernullable
    • genderenumnullable
      allfemalemale
    • expandboolean
  • adobject
    Show 3 child fields
    • primaryTextstringnullable
    • callToActionenumnullable
      book_nowcontact_usdownloadlearn_moreshop_nowsign_upsubscribe
    • headlinestringnullable
  • optimizationEventenumnullable
    installpurchasesubscriptiontrial_startinitiate_checkoutadd_to_cartview_contentcomplete_registrationleadcontact
  • settingsany
  • trackingany
  • identityenum
    brandcreator
  • creativessub_…[]
  • adSetsobject[]

    The campaign's ad sets as planned: each one's share of the budget and its ads. Names can use {{variables}}.

    Show 4 child fields
    • idadset_…
    • namestring
    • budgetSharenumber

      In percent.

    • adsobject[]
      Show 3 child fields
      • idad_…
      • creativesub_…
      • namestring
  • billingLimitnumbernullable

    The campaign stops spending at this amount, in cents.

  • creatorPayobject

    What creators earn, as their programs' pay set it when the campaign was saved.

    Show 5 child fields
    • modelenum
      ad_spendattributed_revenuelead
    • creatorSharenumbernullable

      The creator's share of spend or revenue, in percent.

    • leadAmountintegernullable

      What a creator earns per lead, in cents.

    • capintegernullable

      The most a creator earns from the campaign, in cents.

    • revenueEventstringnullable
  • attributionobject

    How creator pay is counted: the ad platform's results (platform) or the Lucra pixel's matches of conversion (lucra).

    Show 2 child fields
    • sourceenum
      platformlucra
    • conversionconv_…nullable
  • platformsobject[]

    How each ad platform reports the campaign.

    Show 3 child fields
    • platformstring
    • statusstring
    • errorstringnullable
  • pendingChangeobjectnullable

    A change still settling: waiting for the brand's approval (PATCH pendingChange: "approved"), or running on the ad platforms.

    Show 2 child fields
    • actionstring
    • statusenum
      awaiting_approvalin_progress
  • partnerApprovalobjectnullable
    Show 4 child fields
    • statusenum
      draftpendingapprovedrejectedchanges_requested
    • notestringnullable
    • requestedAtstringnullable
    • reviewedAtstringnullable
  • createdByPartneracct_…nullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring

Ad fields

GET/v1/ad-fields
read

List the settings each ad platform takes for campaigns, ad sets and ads

const { data } = await lucra.adFields.list({
  query: { platform: "meta" },
})

Query parameters

  • platformenum

    Also returns the universal settings unless universal.

    metatiktokgooglesnapchatuniversal
  • resourceenum
    campaignad_setadcreative
  • statusenum
    implementedplannedprovider_gatedread_onlydeprecated

Plus paging: limit, cursor, createdAfter and createdBefore.

Ad defaults

GET/v1/ad-defaults
read

Get what the account's new campaigns start with

const { data } = await lucra.adDefaults.retrieve()
PATCH/v1/ad-defaults
write

Change what the account's new campaigns start with

const { data } = await lucra.adDefaults.update({
  body: { objective: "conversions" },
})

Body

  • objectiveenumnullable
    conversionstrafficawareness
  • audienceExpansionbooleannullable
  • namingobject
    Show 2 child fields
    • adSetstringnullable
    • adstringnullable
  • trackingobjectnullable
    Show 4 child fields
    • urlParametersstring

      Added to every click's landing page: Meta's URL parameters, Google's final URL suffix, appended to TikTok's landing page.

    • trackingUrlTemplatestring

      Google: the tracking template clicks go through.

    • clickTrackingUrlstring

      TikTok campaigns set up before Smart+ only (Smart+ ads have no trackers): your measurement partner's click tracker.

    • impressionTrackingUrlstring

      TikTok campaigns set up before Smart+ only: your measurement partner's impression tracker.

Ad audiences

GET/v1/ad-audiences
read

List an ad account's saved audiences (Meta custom and lookalike audiences, TikTok audiences)

const { data } = await lucra.adAudiences.list({
  query: { connection: "conn_…" },
})

Query parameters

  • connectionconn_…· required

    A Meta or TikTok ad account conn_ from GET /v1/connections.

Plus paging: limit, cursor, createdAfter and createdBefore.

Ad interests

GET/v1/ad-interests
read

Search the interests an ad set can target on Meta or TikTok

const { data } = await lucra.adInterests.list({
  query: { connection: "conn_…", q: "…" },
})

Query parameters

  • connectionconn_…· required

    A Meta or TikTok ad account conn_ from GET /v1/connections.

  • qstring· required

    What to search for, e.g. running.

Plus paging: limit, cursor, createdAfter and createdBefore.

Ad sets

GET/v1/ad-sets
read

List ad sets (Meta ad sets, TikTok and Google ad groups, Snapchat ad squads)

const { data } = await lucra.adSets.list({
  query: { campaign: "camp_…" },
})

Query parameters

  • campaigncamp_…
  • platformenum
    metatiktokgooglesnapchat
  • statusenum
    draftactivepausedarchiveddeletedunknown

Plus paging: limit, cursor, createdAfter and createdBefore.

GET/v1/ad-sets/:id
read

Get an ad set

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

Path parameters

  • idstring· required
PATCH/v1/ad-sets/:id
write

Rename, pause, resume, archive or re-budget an ad set on its platform

const { data } = await lucra.adSets.update({
  path: { id: "…" },
  body: { name: "…" },
})

Path parameters

  • idstring· required

Body

  • namestring
  • statusenum

    active resumes it, paused pauses it, archived stops and archives it.

    activepausedarchived
  • budgetobject

    In cents. Meta ad sets only: TikTok and Google budgets live on the campaign.

  • biddingany

    Meta and TikTok ad sets (beta).

  • audienceany

    Meta and TikTok ad sets (beta).

POST/v1/ad-sets/:id/copies
write

Copy an ad set (and run it paused) in its campaign or another one

const { data } = await lucra.adSets.copies.create({
  path: { id: "…" },
  body: { name: "…" },
})

Path parameters

  • idstring· required

Body

  • namestring

    Defaults to the source's name with " (copy)".

  • intocamp_…

    Another launched campaign on the same ad account; defaults to the source's own.

Response2021 fieldsShow
  • idstring

    The copy's ID; it reads back from GET once the platform confirms it.

Ads

GET/v1/ads
read

List ads: the ones Lucra launched, or with source=external the other ads in your connected ad accounts

const { data } = await lucra.ads.list({
  query: { campaign: "camp_…" },
})

Query parameters

  • campaigncamp_…
  • platformenum
    metatiktokgooglesnapchat
  • statusenum
    draftactivepausedarchiveddeletedunknown
  • adSetadset_…
  • sourceenum

    lucra: ads Lucra campaigns launched (the default). external: the other ads in your connected ad accounts, read back for reporting (the last 90 days on connecting, then kept current).

    lucraexternal

Plus paging: limit, cursor, createdAfter and createdBefore.

GET/v1/ads/:id
read

Get an ad

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

Path parameters

  • idstring· required
PATCH/v1/ads/:id
write

Rename, pause, resume or archive an ad on its platform

const { data } = await lucra.ads.update({
  path: { id: "…" },
  body: { name: "…" },
})

Path parameters

  • idstring· required

Body

  • namestring
  • statusenum

    active resumes it, paused pauses it, archived stops and archives it.

    activepausedarchived
POST/v1/ads/:id/copies
write

Copy an ad (and run it paused) in its ad set or another one

const { data } = await lucra.ads.copies.create({
  path: { id: "…" },
  body: { name: "…" },
})

Path parameters

  • idstring· required

Body

  • namestring

    Defaults to the source's name with " (copy)".

  • intoadset_…

    Another launched ad set on the same ad account; defaults to the source's own.

Response2021 fieldsShow
  • idstring

    The copy's ID; it reads back from GET once the platform confirms it.

Connections

GET/v1/connections/:id
As creatorread

Get a connection

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

Path parameters

  • idconn_…· required
Response20012 fieldsShow
  • idconn_…
  • providerenum

    The platform connected.

    metatiktokgooglesnapchatshopifyinstagram
  • statusstring

    The platform connection's state, e.g. connected, active, expired; a shop is connected or reconnect_required.

  • namestringnullable

    The ad account, the shop domain, or the creator's handle.

  • handlestringnullable

    A creator's handle on the platform; null for a brand's connections.

  • avatarUrlstringnullable

    A short-lived link to a creator account's profile photo.

  • lastSyncedAtstringnullable
  • errorstringnullable

    Why a creator account's last sync failed, e.g. token_expired.

  • activeCampaignsinteger

    Live campaigns (or ones needing attention) on an ad platform connection. Campaigns only; canDisconnect covers every reason a disconnect is refused.

  • canDisconnectboolean

    Whether a disconnect would be accepted now: you manage the account's connections (or it's your own creator account), and no campaign, ad operation or ad plan is active on it.

  • createdAtstring
  • updatedAtstring
GET/v1/connections/:id/setup
read

List an ad platform's accounts, pages and identities to pick from, and the ones picked

const { data } = await lucra.connections.setup.retrieve({
  path: { id: "conn_…" },
  query: { adAccountId: "…" },
})

Path parameters

  • idconn_…· required

Query parameters

  • adAccountIdstring

    The ad account campaigns run in (Meta, Google, Snapchat).

  • advertiserIdstring

    TikTok's advertiser account.

  • businessCenterIdstring

    TikTok's business center; send it to list the advertisers under it.

  • businessIdstring

    Meta's business; send it to list the ad accounts and pages under it.

  • identityIdstring

    The TikTok identity ads post as.

  • organizationIdstring

    Snapchat's organization; send it to list its ad accounts.

  • pageIdstring

    The Facebook page Meta ads post as.

  • profileIdstring

    Snapchat's public profile ads post as.

GET/v1/connections
As creatorread

List connected ad platforms, Shopify and creator social accounts

const { data } = await lucra.connections.list()

Query parameters

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 12 fields each, and nextCursorShow
  • idconn_…
  • providerenum

    The platform connected.

    metatiktokgooglesnapchatshopifyinstagram
  • statusstring

    The platform connection's state, e.g. connected, active, expired; a shop is connected or reconnect_required.

  • namestringnullable

    The ad account, the shop domain, or the creator's handle.

  • handlestringnullable

    A creator's handle on the platform; null for a brand's connections.

  • avatarUrlstringnullable

    A short-lived link to a creator account's profile photo.

  • lastSyncedAtstringnullable
  • errorstringnullable

    Why a creator account's last sync failed, e.g. token_expired.

  • activeCampaignsinteger

    Live campaigns (or ones needing attention) on an ad platform connection. Campaigns only; canDisconnect covers every reason a disconnect is refused.

  • canDisconnectboolean

    Whether a disconnect would be accepted now: you manage the account's connections (or it's your own creator account), and no campaign, ad operation or ad plan is active on it.

  • createdAtstring
  • updatedAtstring
POST/v1/connections/:id/syncs
As creatorwrite

Sync a connected shop's catalog, or, as a creator, mirror a social account's posts now

const { data } = await lucra.connections.syncs.create({
  path: { id: "conn_…" },
})

Path parameters

  • idconn_…· required
POST/v1/connections
As creatorwrite

Connect a platform, payouts or a card: returns the hosted page to send the person to

const { data } = await lucra.connections.create({
  body: { provider: "meta" },
})

Body

  • providerenum· required

    A brand connects meta, google, snapchat, tiktok or shopify; a creator (Lucra-Account: crtr_…) instagram or tiktok. stripe sets up payouts on Stripe (identity and bank until verified, then managing them), for a creator or the account itself; card adds or manages the card Lucra charges a brand.

    metagooglesnapchattiktokinstagramshopifystripecard
  • shopstring

    With shopify: the store's domain, like acme.myshopify.com.

  • countryenum

    With stripe, for a creator: their payout country, required the first time. These are the countries Lucra pays out to; creators elsewhere can't be paid out yet. Stripe Global Payouts countries (paid to the bank every Monday) are accepted only while Lucra has them switched on, and never for an account's own payouts: anything else is a 422. GET /v1/payouts/countries lists the ones open now.

    ATBEBGCAHRCYCZDKEEFIFRDEGRHUISIEITLVLILTLUMTNLNOPLPTROSKSIESSECHGBUSAUINIDILJPJMMXMCMANZSMSGTT
  • returnUrlstring

    Where the person comes back to, with status=connected or status=error added: your own https page (its origin must be on the key's embed origins), a page of the Lucra app (a path), or lucra-creators: for the Lucra iOS app. Defaults to a hosted done page (for stripe and card, the matching settings page).

  • checkoutenum

    With card or stripe. hosted (the default) returns Stripe's page at url. With card, elements returns clientSecret to save a new card in your own form with Stripe's Payment Element (Checkout elements, setup mode), which then replaces the card charged. With stripe, elements returns clientSecret and component for Stripe's embedded Connect component (Connect.js): account_onboarding until identity is verified, then account_management. A Global Payouts creator has no embedded form: url is Stripe's hosted page instead, with clientSecret null.

    hostedelements
Response2014 fieldsShow
  • urlstringnullable

    Send the person here: they finish on the platform or Stripe, never on Lucra. The connection.connected (or creator.payouts_updated) webhook, or GET /v1/connections, shows the result. Null with checkout: elements.

  • clientSecretstringnullable

    With checkout: elements: for card, the Checkout Session's client secret for Stripe's Payment Element (initCheckoutElementsSdk; Stripe's setup webhook saves the card); for stripe, the account session's client secret for Connect.js (fetchClientSecret). Null otherwise.

  • componentenumnullable

    With stripe and checkout: elements: the Connect embedded component to render with the client secret; null otherwise.

    account_onboardingaccount_management
  • expiresAtstringnullable

    When the page stops working; null when it doesn't expire.

PATCH/v1/connections/:id
As creatorwrite

Pick a brand's ad account, page and identity after signing in, or disconnect a connection

const { data } = await lucra.connections.update({
  path: { id: "conn_…" },
  body: { status: "disconnected" },
})

Path parameters

  • idconn_…· required

Body

  • statusstring

    Disconnects it: Lucra forgets the platform's tokens. An ad platform with live campaigns (see canDisconnect) is refused.

    disconnected
  • selectionobject

    A brand's ad platform picks, from GET /v1/connections/:id/setup: send the IDs it lists (e.g. adAccountId and pageId) to save them.

    Show 8 child fields
    • adAccountIdstring

      The ad account campaigns run in (Meta, Google, Snapchat).

    • advertiserIdstring

      TikTok's advertiser account.

    • businessCenterIdstring

      TikTok's business center; send it to list the advertisers under it.

    • businessIdstring

      Meta's business; send it to list the ad accounts and pages under it.

    • identityIdstring

      The TikTok identity ads post as.

    • organizationIdstring

      Snapchat's organization; send it to list its ad accounts.

    • pageIdstring

      The Facebook page Meta ads post as.

    • profileIdstring

      Snapchat's public profile ads post as.

Response20012 fieldsShow
  • idconn_…
  • providerenum

    The platform connected.

    metatiktokgooglesnapchatshopifyinstagram
  • statusstring

    The platform connection's state, e.g. connected, active, expired; a shop is connected or reconnect_required.

  • namestringnullable

    The ad account, the shop domain, or the creator's handle.

  • handlestringnullable

    A creator's handle on the platform; null for a brand's connections.

  • avatarUrlstringnullable

    A short-lived link to a creator account's profile photo.

  • lastSyncedAtstringnullable
  • errorstringnullable

    Why a creator account's last sync failed, e.g. token_expired.

  • activeCampaignsinteger

    Live campaigns (or ones needing attention) on an ad platform connection. Campaigns only; canDisconnect covers every reason a disconnect is refused.

  • canDisconnectboolean

    Whether a disconnect would be accepted now: you manage the account's connections (or it's your own creator account), and no campaign, ad operation or ad plan is active on it.

  • createdAtstring
  • updatedAtstring
GET/v1/connections/:id/posts
As creatorread

List the posts Lucra mirrors from a creator's connected account, newest first

const { data } = await lucra.connections.posts.list({
  path: { id: "conn_…" },
})

Path parameters

  • idconn_…· required
Response200A page of items, 12 fields each, and nextCursorShow
  • idstring

    The post's ID on its platform.

  • platformenum
    instagramtiktok
  • urlstringnullable
  • titlestringnullable
  • captionstringnullable
  • publishedAtstringnullable
  • durationLabelstringnullable
  • durationSecondsnumbernullable
  • thumbnailUrlstringnullable
  • videoUrlstringnullable
  • thumbnailImageobjectnullable
    Show 5 child fields
    • fileIdstringnullable
    • urlstring
    • widthnumbernullable
    • heightnumbernullable
    • blurHashstringnullable
  • metricsobjectnullable
    Show 6 child fields
    • viewsnumber
    • likesnumbernullable
    • commentsnumbernullable
    • sharesnumbernullable
    • savesnumbernullable
    • engagementsnumbernullable

Creators

GET/v1/creators
read

List the account's creators and, for a partner, its roster

const { data } = await lucra.creators.list({
  query: { q: "…" },
})

Query parameters

  • qstring

    Matches the name, email or a handle.

  • statusstring

    One or more of invited, live, paused, review, removed; removed creators are left out unless asked for.

  • programprog_…

    Only creators approved into this program.

  • relationshipenum
    directrepresented
  • visibilityenum
    privatenetwork

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 32 fields each, and nextCursorShow
  • idcrtr_…
  • namestring
  • handlestringnullable
  • emailstringnullable
  • phonestringnullable
  • profilePicturefile_…nullable
  • imageobjectnullable

    The creator's picture, with a short-lived url.

    Show 5 child fields
    • fileIdfile_…nullable
    • urlstring
    • widthnumbernullable
    • heightnumbernullable
    • blurHashstringnullable
  • biostringnullable
  • locationstringnullable
  • platformHandlesobject

    Handles by platform, e.g. { tiktok: "@sam" }.

  • tagsstring[]
  • notesstringnullable
  • statusenumnullable

    The creator's status with this account; null on a marketplace listing of a creator not in it.

    invitedlivepausedreviewremoved
  • relationshipenumnullable

    direct: in this account; represented: on a partner's roster; null on a marketplace listing of a creator not in it.

    directrepresented
  • managedByacct_…nullable
  • visibilityenum

    private: hidden from brands' discovery; network: brands can find them.

    privatenetwork
  • chatAvailableboolean
  • programsprog_…[]

    Programs the creator is approved into in this account.

  • brandsacct_…[]

    A partner's roster creator: the client brands they work with through the partner.

  • retainerobjectnullable

    The creator's open retainer with this account and its terms; GET /v1/retainers/:id has the rest.

    Show 8 child fields
    • idret_…
    • statusenum
      offeredacceptedactivecanceling
    • payobject
      Show 5 child fields
      • rulesobject[]
      • baseinteger

        Guaranteed each period, in cents.

      • capintegernullable

        The most one creator is paid per period, in cents; null or left out for no cap.

      • scheduleobject
      • approvalenum

        automatic pays each period on its own; manual waits for the brand to approve the calculated amount.

        automaticmanual
    • summarystring

      The pay in plain English.

    • currencystring

      Lowercase ISO 4217 code, e.g. usd.

    • deliverablesstringnullable
    • notesstringnullable
    • currentPeriodEndAtstringnullable
  • payoutsobjectnullable

    Where the creator is paid. To finish setup, send the creator to the URL from POST /v1/connections with provider: "stripe"; creator.payouts_updated fires when it changes. Null on a marketplace listing.

    Show 2 child fields
    • identityobject
      Show 1 child field
      • statusenum
        requiredpendingverified
    • bankAccountobjectnullable
      Show 1 child field
      • statusenum
        missingadded
  • statsobject
    Show 4 child fields
    • approvedVideosinteger
    • pendingVideosinteger
    • approvalRatenumber

      Percent of reviewed submissions approved.

    • installsinteger
  • tierenum

    The tier the creator's XP reaches, Bronze to Diamond.

    bronzesilvergoldplatinumdiamond
  • performanceobjectnullable

    Daily ad results of the creator's work and submissions approved each day, for this account; null outside its own creators.

    Show 2 child fields
    • currencystring

      Lowercase ISO 4217 code, e.g. usd.

    • daysobject[]
      Show 7 child fields
      • datestring
      • spendinteger
      • revenueinteger
      • clicksinteger
      • impressionsinteger
      • purchasesinteger
      • approvedSubmissionsinteger
  • referenceVideosobject[]

    Posts the creator shows brands, newest choice first.

    Show 10 child fields
    • platformenum
      instagramtiktokupload
    • poststring

      The post's ID on its platform; for an upload, the uploaded video's file_….

    • filefile_…nullable
    • urlstringnullable
    • titlestringnullable
    • publishedAtstringnullable
    • durationLabelstringnullable
    • thumbnailUrlstringnullable
    • thumbnailImageobjectnullable
      Show 5 child fields
      • fileIdfile_…nullable
      • urlstring
      • widthnumbernullable
      • heightnumbernullable
      • blurHashstringnullable
    • videoUrlstringnullable
  • takeRateobjectnullable

    A partner's roster creator: the partner's cut of their pay. Null elsewhere.

    Show 2 child fields
    • percentnumber
    • customboolean

      Set for this creator alone; false follows the partner's default.

  • claimobjectnullable

    A partner's roster creator: whether they've claimed the account Lucra made for them. They claim it by signing in to Lucra with that email, verified.

    Show 1 child field
    • statusenum
      invitedclaimed
  • listingobject

    A marketplace listing's fields; only on GET /v1/marketplace/creators.

    Show 12 child fields
    • headlinestringnullable
    • specialtystringnullable
    • agenumbernullable
    • genderstringnullable
    • categoriesstring[]
    • creativeStylesstring[]
    • interestsstring[]
    • requestStatusenumnullable

      Your account's latest connection request to them.

      pendingaccepteddeclined
    • audiencestringnullable
    • lastActivestringnullable
    • responseTimestringnullable
    • submissionsobject[]

      Work the creator submitted on Lucra; on one creator's read.

      Show 10 child fields
      • idsub_…
      • programNamestringnullable
      • platformenumnullable
        instagramtiktok
      • statusenum
        approvedliverejectedreviewrevision
      • submittedAtstringnullable
      • durationstringnullable
      • formatstringnullable
      • thumbnailUrlstringnullable
      • videoUrlstringnullable
      • thumbnailImageobjectnullable
        Show 5 child fields
        • fileIdfile_…nullable
        • urlstring
        • widthnumbernullable
        • heightnumbernullable
        • blurHashstringnullable
  • profileobject

    Only when a creator reads themselves.

    Show 8 child fields
    • birthDatestringnullable
    • genderstringnullable
    • interestsstring[]
    • creativeStylesstring[]
    • locationDetailsobjectnullable
      Show 9 child fields
      • citystring
      • countryCodestring
      • countryNamestring
      • displayNamestring
      • geonamesIdstring
      • latitudenumber
      • longitudenumber
      • regionCodestring
      • regionNamestring
    • onboardingCompletedAtstringnullable
    • hiddenFromacct_…[]

      Partners that hide this creator from their Discover.

    • partnerFeeobjectnullable

      The share of the creator's pay the partner representing them (managedBy) takes, if any.

      Show 2 child fields
      • partneracct_…
      • percentnumber
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
GET/v1/creators/:id
As creatorread

Get one of the account's creators, or, as a creator, yourself

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

Path parameters

  • idcrtr_…· required
Response20032 fieldsShow
  • idcrtr_…
  • namestring
  • handlestringnullable
  • emailstringnullable
  • phonestringnullable
  • profilePicturefile_…nullable
  • imageobjectnullable

    The creator's picture, with a short-lived url.

    Show 5 child fields
    • fileIdfile_…nullable
    • urlstring
    • widthnumbernullable
    • heightnumbernullable
    • blurHashstringnullable
  • biostringnullable
  • locationstringnullable
  • platformHandlesobject

    Handles by platform, e.g. { tiktok: "@sam" }.

  • tagsstring[]
  • notesstringnullable
  • statusenumnullable

    The creator's status with this account; null on a marketplace listing of a creator not in it.

    invitedlivepausedreviewremoved
  • relationshipenumnullable

    direct: in this account; represented: on a partner's roster; null on a marketplace listing of a creator not in it.

    directrepresented
  • managedByacct_…nullable
  • visibilityenum

    private: hidden from brands' discovery; network: brands can find them.

    privatenetwork
  • chatAvailableboolean
  • programsprog_…[]

    Programs the creator is approved into in this account.

  • brandsacct_…[]

    A partner's roster creator: the client brands they work with through the partner.

  • retainerobjectnullable

    The creator's open retainer with this account and its terms; GET /v1/retainers/:id has the rest.

    Show 8 child fields
    • idret_…
    • statusenum
      offeredacceptedactivecanceling
    • payobject
      Show 5 child fields
      • rulesobject[]
      • baseinteger

        Guaranteed each period, in cents.

      • capintegernullable

        The most one creator is paid per period, in cents; null or left out for no cap.

      • scheduleobject
      • approvalenum

        automatic pays each period on its own; manual waits for the brand to approve the calculated amount.

        automaticmanual
    • summarystring

      The pay in plain English.

    • currencystring

      Lowercase ISO 4217 code, e.g. usd.

    • deliverablesstringnullable
    • notesstringnullable
    • currentPeriodEndAtstringnullable
  • payoutsobjectnullable

    Where the creator is paid. To finish setup, send the creator to the URL from POST /v1/connections with provider: "stripe"; creator.payouts_updated fires when it changes. Null on a marketplace listing.

    Show 2 child fields
    • identityobject
      Show 1 child field
      • statusenum
        requiredpendingverified
    • bankAccountobjectnullable
      Show 1 child field
      • statusenum
        missingadded
  • statsobject
    Show 4 child fields
    • approvedVideosinteger
    • pendingVideosinteger
    • approvalRatenumber

      Percent of reviewed submissions approved.

    • installsinteger
  • tierenum

    The tier the creator's XP reaches, Bronze to Diamond.

    bronzesilvergoldplatinumdiamond
  • performanceobjectnullable

    Daily ad results of the creator's work and submissions approved each day, for this account; null outside its own creators.

    Show 2 child fields
    • currencystring

      Lowercase ISO 4217 code, e.g. usd.

    • daysobject[]
      Show 7 child fields
      • datestring
      • spendinteger
      • revenueinteger
      • clicksinteger
      • impressionsinteger
      • purchasesinteger
      • approvedSubmissionsinteger
  • referenceVideosobject[]

    Posts the creator shows brands, newest choice first.

    Show 10 child fields
    • platformenum
      instagramtiktokupload
    • poststring

      The post's ID on its platform; for an upload, the uploaded video's file_….

    • filefile_…nullable
    • urlstringnullable
    • titlestringnullable
    • publishedAtstringnullable
    • durationLabelstringnullable
    • thumbnailUrlstringnullable
    • thumbnailImageobjectnullable
      Show 5 child fields
      • fileIdfile_…nullable
      • urlstring
      • widthnumbernullable
      • heightnumbernullable
      • blurHashstringnullable
    • videoUrlstringnullable
  • takeRateobjectnullable

    A partner's roster creator: the partner's cut of their pay. Null elsewhere.

    Show 2 child fields
    • percentnumber
    • customboolean

      Set for this creator alone; false follows the partner's default.

  • claimobjectnullable

    A partner's roster creator: whether they've claimed the account Lucra made for them. They claim it by signing in to Lucra with that email, verified.

    Show 1 child field
    • statusenum
      invitedclaimed
  • listingobject

    A marketplace listing's fields; only on GET /v1/marketplace/creators.

    Show 12 child fields
    • headlinestringnullable
    • specialtystringnullable
    • agenumbernullable
    • genderstringnullable
    • categoriesstring[]
    • creativeStylesstring[]
    • interestsstring[]
    • requestStatusenumnullable

      Your account's latest connection request to them.

      pendingaccepteddeclined
    • audiencestringnullable
    • lastActivestringnullable
    • responseTimestringnullable
    • submissionsobject[]

      Work the creator submitted on Lucra; on one creator's read.

      Show 10 child fields
      • idsub_…
      • programNamestringnullable
      • platformenumnullable
        instagramtiktok
      • statusenum
        approvedliverejectedreviewrevision
      • submittedAtstringnullable
      • durationstringnullable
      • formatstringnullable
      • thumbnailUrlstringnullable
      • videoUrlstringnullable
      • thumbnailImageobjectnullable
        Show 5 child fields
        • fileIdfile_…nullable
        • urlstring
        • widthnumbernullable
        • heightnumbernullable
        • blurHashstringnullable
  • profileobject

    Only when a creator reads themselves.

    Show 8 child fields
    • birthDatestringnullable
    • genderstringnullable
    • interestsstring[]
    • creativeStylesstring[]
    • locationDetailsobjectnullable
      Show 9 child fields
      • citystring
      • countryCodestring
      • countryNamestring
      • displayNamestring
      • geonamesIdstring
      • latitudenumber
      • longitudenumber
      • regionCodestring
      • regionNamestring
    • onboardingCompletedAtstringnullable
    • hiddenFromacct_…[]

      Partners that hide this creator from their Discover.

    • partnerFeeobjectnullable

      The share of the creator's pay the partner representing them (managedBy) takes, if any.

      Show 2 child fields
      • partneracct_…
      • percentnumber
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
POST/v1/creators
write

Add a creator to a partner's roster; one already on it is returned with 200, and one with a Lucra account is invited (status invited) until they accept

const { data } = await lucra.creators.create({
  body: { email: "…" },
})

Body

  • emailstring· required
  • namestring
  • phonestring
  • visibilityenum
    privatenetwork
Response20132 fieldsShow
  • idcrtr_…
  • namestring
  • handlestringnullable
  • emailstringnullable
  • phonestringnullable
  • profilePicturefile_…nullable
  • imageobjectnullable

    The creator's picture, with a short-lived url.

    Show 5 child fields
    • fileIdfile_…nullable
    • urlstring
    • widthnumbernullable
    • heightnumbernullable
    • blurHashstringnullable
  • biostringnullable
  • locationstringnullable
  • platformHandlesobject

    Handles by platform, e.g. { tiktok: "@sam" }.

  • tagsstring[]
  • notesstringnullable
  • statusenumnullable

    The creator's status with this account; null on a marketplace listing of a creator not in it.

    invitedlivepausedreviewremoved
  • relationshipenumnullable

    direct: in this account; represented: on a partner's roster; null on a marketplace listing of a creator not in it.

    directrepresented
  • managedByacct_…nullable
  • visibilityenum

    private: hidden from brands' discovery; network: brands can find them.

    privatenetwork
  • chatAvailableboolean
  • programsprog_…[]

    Programs the creator is approved into in this account.

  • brandsacct_…[]

    A partner's roster creator: the client brands they work with through the partner.

  • retainerobjectnullable

    The creator's open retainer with this account and its terms; GET /v1/retainers/:id has the rest.

    Show 8 child fields
    • idret_…
    • statusenum
      offeredacceptedactivecanceling
    • payobject
      Show 5 child fields
      • rulesobject[]
      • baseinteger

        Guaranteed each period, in cents.

      • capintegernullable

        The most one creator is paid per period, in cents; null or left out for no cap.

      • scheduleobject
      • approvalenum

        automatic pays each period on its own; manual waits for the brand to approve the calculated amount.

        automaticmanual
    • summarystring

      The pay in plain English.

    • currencystring

      Lowercase ISO 4217 code, e.g. usd.

    • deliverablesstringnullable
    • notesstringnullable
    • currentPeriodEndAtstringnullable
  • payoutsobjectnullable

    Where the creator is paid. To finish setup, send the creator to the URL from POST /v1/connections with provider: "stripe"; creator.payouts_updated fires when it changes. Null on a marketplace listing.

    Show 2 child fields
    • identityobject
      Show 1 child field
      • statusenum
        requiredpendingverified
    • bankAccountobjectnullable
      Show 1 child field
      • statusenum
        missingadded
  • statsobject
    Show 4 child fields
    • approvedVideosinteger
    • pendingVideosinteger
    • approvalRatenumber

      Percent of reviewed submissions approved.

    • installsinteger
  • tierenum

    The tier the creator's XP reaches, Bronze to Diamond.

    bronzesilvergoldplatinumdiamond
  • performanceobjectnullable

    Daily ad results of the creator's work and submissions approved each day, for this account; null outside its own creators.

    Show 2 child fields
    • currencystring

      Lowercase ISO 4217 code, e.g. usd.

    • daysobject[]
      Show 7 child fields
      • datestring
      • spendinteger
      • revenueinteger
      • clicksinteger
      • impressionsinteger
      • purchasesinteger
      • approvedSubmissionsinteger
  • referenceVideosobject[]

    Posts the creator shows brands, newest choice first.

    Show 10 child fields
    • platformenum
      instagramtiktokupload
    • poststring

      The post's ID on its platform; for an upload, the uploaded video's file_….

    • filefile_…nullable
    • urlstringnullable
    • titlestringnullable
    • publishedAtstringnullable
    • durationLabelstringnullable
    • thumbnailUrlstringnullable
    • thumbnailImageobjectnullable
      Show 5 child fields
      • fileIdfile_…nullable
      • urlstring
      • widthnumbernullable
      • heightnumbernullable
      • blurHashstringnullable
    • videoUrlstringnullable
  • takeRateobjectnullable

    A partner's roster creator: the partner's cut of their pay. Null elsewhere.

    Show 2 child fields
    • percentnumber
    • customboolean

      Set for this creator alone; false follows the partner's default.

  • claimobjectnullable

    A partner's roster creator: whether they've claimed the account Lucra made for them. They claim it by signing in to Lucra with that email, verified.

    Show 1 child field
    • statusenum
      invitedclaimed
  • listingobject

    A marketplace listing's fields; only on GET /v1/marketplace/creators.

    Show 12 child fields
    • headlinestringnullable
    • specialtystringnullable
    • agenumbernullable
    • genderstringnullable
    • categoriesstring[]
    • creativeStylesstring[]
    • interestsstring[]
    • requestStatusenumnullable

      Your account's latest connection request to them.

      pendingaccepteddeclined
    • audiencestringnullable
    • lastActivestringnullable
    • responseTimestringnullable
    • submissionsobject[]

      Work the creator submitted on Lucra; on one creator's read.

      Show 10 child fields
      • idsub_…
      • programNamestringnullable
      • platformenumnullable
        instagramtiktok
      • statusenum
        approvedliverejectedreviewrevision
      • submittedAtstringnullable
      • durationstringnullable
      • formatstringnullable
      • thumbnailUrlstringnullable
      • videoUrlstringnullable
      • thumbnailImageobjectnullable
        Show 5 child fields
        • fileIdfile_…nullable
        • urlstring
        • widthnumbernullable
        • heightnumbernullable
        • blurHashstringnullable
  • profileobject

    Only when a creator reads themselves.

    Show 8 child fields
    • birthDatestringnullable
    • genderstringnullable
    • interestsstring[]
    • creativeStylesstring[]
    • locationDetailsobjectnullable
      Show 9 child fields
      • citystring
      • countryCodestring
      • countryNamestring
      • displayNamestring
      • geonamesIdstring
      • latitudenumber
      • longitudenumber
      • regionCodestring
      • regionNamestring
    • onboardingCompletedAtstringnullable
    • hiddenFromacct_…[]

      Partners that hide this creator from their Discover.

    • partnerFeeobjectnullable

      The share of the creator's pay the partner representing them (managedBy) takes, if any.

      Show 2 child fields
      • partneracct_…
      • percentnumber
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
PATCH/v1/creators/:id
As creatorwrite

Update a creator: a brand's labels and status, a partner's roster creator, or, as a creator, your own profile

const { data } = await lucra.creators.update({
  path: { id: "crtr_…" },
  body: { visibility: "private" },
})

Path parameters

  • idcrtr_…· required

Body

  • visibilityenum
    privatenetwork
  • profilePicturefile_…nullable
  • tagsstring[]
  • notesstringnullable
  • statusenum
    livepausedremoved
  • brandsacct_…[]

    A partner's roster creator works with exactly these client brands; brands left out stop working with them.

  • takeRatenumbernullable

    A partner's roster creator: the partner's cut of their pay, as a percent, from now on; null puts them back on the partner's default.

  • biostring
  • birthDatestringnullable
  • creativeStylesenum[]
    product_demotestimonial_reviewtalking_headvoiceover_brolllifestyle_routineunboxingscreen_recordingcomedy_skit
  • emailstring
  • genderenumnullable
    womanmannonbinaryself_describeundisclosed
  • handlestring

    Your @handle, unique on Lucra: 1–30 letters, numbers, periods, underscores or hyphens. A leading @ is dropped and it is saved lowercase.

  • interestsenum[]
    fitnessbeautyfashionfood_drinktech_gamingtravelhome_diyparentingfinancewellnesspetscomedyeducationoutdoorsfitness_gymfitness_runningfitness_yogafitness_sportsbeauty_makeupbeauty_skincarebeauty_hairbeauty_nailsfashion_streetwearfashion_luxuryfashion_thriftfashion_menswearfood_drink_cookingfood_drink_bakingfood_drink_restaurantsfood_drink_coffeetech_gaming_gamingtech_gaming_gadgetstech_gaming_appstech_gaming_aitravel_budgettravel_luxurytravel_citytravel_adventurehome_diy_renovationhome_diy_decorhome_diy_gardeninghome_diy_organizationparenting_pregnancyparenting_babiesparenting_school_ageparenting_teensfinance_investingfinance_budgetingfinance_side_hustlesfinance_cryptowellness_mental_healthwellness_meditationwellness_nutritionwellness_sleeppets_dogspets_catspets_exoticpets_trainingcomedy_skitscomedy_prankscomedy_memescomedy_standupeducation_studyeducation_languageseducation_scienceeducation_historyoutdoors_campingoutdoors_hikingoutdoors_fishingoutdoors_climbing
  • locationstring
  • locationDetailsobjectnullable
    Show 9 child fields
    • citystring· required
    • countryCodestring· required
    • countryNamestring· required
    • displayNamestring· required
    • geonamesIdstring
    • latitudenumber
    • longitudenumber
    • regionCodestring
    • regionNamestring
  • namestring
  • platformHandlesobject
    Show 2 child fields
    • instagramstring
    • tiktokstring
  • referenceVideoSelectionsobject[]
    Show 10 child fields
    • durationLabelstring
    • mediaAssetIdstring
    • platformenum· required
      instagramtiktokupload
    • publishedAtstring
    • sourceContentIdstring· required
    • sourceUrlstring
    • thumbnailImageobjectnullable
      Show 5 child fields
      • fileIdstring· required
      • urlstring
      • widthintegernullable
      • heightintegernullable
      • blurHashstringnullable
    • thumbnailUrlstring
    • titlestring
    • videoUrlstring
  • referenceVideosstring[]
  • pictureFromenum

    Use this connected account's profile photo as the creator's picture.

    instagramtiktok
  • versioninteger
Response20032 fieldsShow
  • idcrtr_…
  • namestring
  • handlestringnullable
  • emailstringnullable
  • phonestringnullable
  • profilePicturefile_…nullable
  • imageobjectnullable

    The creator's picture, with a short-lived url.

    Show 5 child fields
    • fileIdfile_…nullable
    • urlstring
    • widthnumbernullable
    • heightnumbernullable
    • blurHashstringnullable
  • biostringnullable
  • locationstringnullable
  • platformHandlesobject

    Handles by platform, e.g. { tiktok: "@sam" }.

  • tagsstring[]
  • notesstringnullable
  • statusenumnullable

    The creator's status with this account; null on a marketplace listing of a creator not in it.

    invitedlivepausedreviewremoved
  • relationshipenumnullable

    direct: in this account; represented: on a partner's roster; null on a marketplace listing of a creator not in it.

    directrepresented
  • managedByacct_…nullable
  • visibilityenum

    private: hidden from brands' discovery; network: brands can find them.

    privatenetwork
  • chatAvailableboolean
  • programsprog_…[]

    Programs the creator is approved into in this account.

  • brandsacct_…[]

    A partner's roster creator: the client brands they work with through the partner.

  • retainerobjectnullable

    The creator's open retainer with this account and its terms; GET /v1/retainers/:id has the rest.

    Show 8 child fields
    • idret_…
    • statusenum
      offeredacceptedactivecanceling
    • payobject
      Show 5 child fields
      • rulesobject[]
      • baseinteger

        Guaranteed each period, in cents.

      • capintegernullable

        The most one creator is paid per period, in cents; null or left out for no cap.

      • scheduleobject
      • approvalenum

        automatic pays each period on its own; manual waits for the brand to approve the calculated amount.

        automaticmanual
    • summarystring

      The pay in plain English.

    • currencystring

      Lowercase ISO 4217 code, e.g. usd.

    • deliverablesstringnullable
    • notesstringnullable
    • currentPeriodEndAtstringnullable
  • payoutsobjectnullable

    Where the creator is paid. To finish setup, send the creator to the URL from POST /v1/connections with provider: "stripe"; creator.payouts_updated fires when it changes. Null on a marketplace listing.

    Show 2 child fields
    • identityobject
      Show 1 child field
      • statusenum
        requiredpendingverified
    • bankAccountobjectnullable
      Show 1 child field
      • statusenum
        missingadded
  • statsobject
    Show 4 child fields
    • approvedVideosinteger
    • pendingVideosinteger
    • approvalRatenumber

      Percent of reviewed submissions approved.

    • installsinteger
  • tierenum

    The tier the creator's XP reaches, Bronze to Diamond.

    bronzesilvergoldplatinumdiamond
  • performanceobjectnullable

    Daily ad results of the creator's work and submissions approved each day, for this account; null outside its own creators.

    Show 2 child fields
    • currencystring

      Lowercase ISO 4217 code, e.g. usd.

    • daysobject[]
      Show 7 child fields
      • datestring
      • spendinteger
      • revenueinteger
      • clicksinteger
      • impressionsinteger
      • purchasesinteger
      • approvedSubmissionsinteger
  • referenceVideosobject[]

    Posts the creator shows brands, newest choice first.

    Show 10 child fields
    • platformenum
      instagramtiktokupload
    • poststring

      The post's ID on its platform; for an upload, the uploaded video's file_….

    • filefile_…nullable
    • urlstringnullable
    • titlestringnullable
    • publishedAtstringnullable
    • durationLabelstringnullable
    • thumbnailUrlstringnullable
    • thumbnailImageobjectnullable
      Show 5 child fields
      • fileIdfile_…nullable
      • urlstring
      • widthnumbernullable
      • heightnumbernullable
      • blurHashstringnullable
    • videoUrlstringnullable
  • takeRateobjectnullable

    A partner's roster creator: the partner's cut of their pay. Null elsewhere.

    Show 2 child fields
    • percentnumber
    • customboolean

      Set for this creator alone; false follows the partner's default.

  • claimobjectnullable

    A partner's roster creator: whether they've claimed the account Lucra made for them. They claim it by signing in to Lucra with that email, verified.

    Show 1 child field
    • statusenum
      invitedclaimed
  • listingobject

    A marketplace listing's fields; only on GET /v1/marketplace/creators.

    Show 12 child fields
    • headlinestringnullable
    • specialtystringnullable
    • agenumbernullable
    • genderstringnullable
    • categoriesstring[]
    • creativeStylesstring[]
    • interestsstring[]
    • requestStatusenumnullable

      Your account's latest connection request to them.

      pendingaccepteddeclined
    • audiencestringnullable
    • lastActivestringnullable
    • responseTimestringnullable
    • submissionsobject[]

      Work the creator submitted on Lucra; on one creator's read.

      Show 10 child fields
      • idsub_…
      • programNamestringnullable
      • platformenumnullable
        instagramtiktok
      • statusenum
        approvedliverejectedreviewrevision
      • submittedAtstringnullable
      • durationstringnullable
      • formatstringnullable
      • thumbnailUrlstringnullable
      • videoUrlstringnullable
      • thumbnailImageobjectnullable
        Show 5 child fields
        • fileIdfile_…nullable
        • urlstring
        • widthnumbernullable
        • heightnumbernullable
        • blurHashstringnullable
  • profileobject

    Only when a creator reads themselves.

    Show 8 child fields
    • birthDatestringnullable
    • genderstringnullable
    • interestsstring[]
    • creativeStylesstring[]
    • locationDetailsobjectnullable
      Show 9 child fields
      • citystring
      • countryCodestring
      • countryNamestring
      • displayNamestring
      • geonamesIdstring
      • latitudenumber
      • longitudenumber
      • regionCodestring
      • regionNamestring
    • onboardingCompletedAtstringnullable
    • hiddenFromacct_…[]

      Partners that hide this creator from their Discover.

    • partnerFeeobjectnullable

      The share of the creator's pay the partner representing them (managedBy) takes, if any.

      Show 2 child fields
      • partneracct_…
      • percentnumber
  • versioninteger

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

  • createdAtstring
  • updatedAtstring

Files

POST/v1/files
As creatorwrite

Upload a file

const { data } = await lucra.files.create({
  query: { purpose: "submission" },
  body: file,
})

Query parameters

  • purposeenum· required
    submissionproduct_imageprofile_pictureprogram_briefprogram_reference_videoagreementchat_attachmentad_creativeprofile_referenceprofile_reference_thumbnail
  • namestring
  • sizeinteger

    Reserve instead of streaming: the file's size in bytes. The body stays empty.

  • contentTypestring

    With size: the file's MIME type.

  • checksumstring

    With size: the file's SHA-256 (lowercase hex). Storage then checks the bytes as they arrive, so finishing a video is quicker.

  • ownerstring

    With purpose=profile_picture: the signed-in person's own photo, for PATCH /v1/me.

    me

Body

The file's raw bytes.

Response20115 fieldsShow
  • idfile_…
  • purposeenum
    submissionproduct_imageprofile_pictureprogram_briefprogram_reference_videoagreementchat_attachmentad_creativeprofile_referenceprofile_reference_thumbnail
  • statusenum

    awaiting_upload: reserved, waiting for the bytes at upload.url; processing: being verified or prepared; failed carries why.

    awaiting_uploadprocessingreadyfaileddeleted
  • fileNamestringnullable
  • contentTypestringnullable
  • sizenumbernullable
  • urlstringnullable

    A signed link to the file, valid for about 10 minutes; null until it's ready.

  • widthnumbernullable
  • heightnumbernullable
  • blurHashstringnullable

    An image's blur-hash placeholder, once computed.

  • errorobjectnullable

    Why it failed; upload_incomplete when the upload was cut off.

    Show 2 child fields
    • codestring
    • messagestring
  • uploadobject

    Where to PUT the bytes, with these headers, before expiresAt; only on a reservation.

    Show 3 child fields
    • urlstring
    • headersobject
    • expiresAtstring
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
GET/v1/files
As creatorread

List files

const { data } = await lucra.files.list({
  query: { purpose: "…" },
})

Query parameters

  • purposestring

    One or more, comma-separated: submission, product_image, profile_picture, program_brief, program_reference_video, agreement, chat_attachment, ad_creative, profile_reference, profile_reference_thumbnail.

  • statusstring

    One or more, comma-separated: awaiting_upload, processing, ready, failed, deleted.

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 15 fields each, and nextCursorShow
  • idfile_…
  • purposeenum
    submissionproduct_imageprofile_pictureprogram_briefprogram_reference_videoagreementchat_attachmentad_creativeprofile_referenceprofile_reference_thumbnail
  • statusenum

    awaiting_upload: reserved, waiting for the bytes at upload.url; processing: being verified or prepared; failed carries why.

    awaiting_uploadprocessingreadyfaileddeleted
  • fileNamestringnullable
  • contentTypestringnullable
  • sizenumbernullable
  • urlstringnullable

    A signed link to the file, valid for about 10 minutes; null until it's ready.

  • widthnumbernullable
  • heightnumbernullable
  • blurHashstringnullable

    An image's blur-hash placeholder, once computed.

  • errorobjectnullable

    Why it failed; upload_incomplete when the upload was cut off.

    Show 2 child fields
    • codestring
    • messagestring
  • uploadobject

    Where to PUT the bytes, with these headers, before expiresAt; only on a reservation.

    Show 3 child fields
    • urlstring
    • headersobject
    • expiresAtstring
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
GET/v1/files/:id
As creatorread

Get a file

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

Path parameters

  • idfile_…· required
Response20015 fieldsShow
  • idfile_…
  • purposeenum
    submissionproduct_imageprofile_pictureprogram_briefprogram_reference_videoagreementchat_attachmentad_creativeprofile_referenceprofile_reference_thumbnail
  • statusenum

    awaiting_upload: reserved, waiting for the bytes at upload.url; processing: being verified or prepared; failed carries why.

    awaiting_uploadprocessingreadyfaileddeleted
  • fileNamestringnullable
  • contentTypestringnullable
  • sizenumbernullable
  • urlstringnullable

    A signed link to the file, valid for about 10 minutes; null until it's ready.

  • widthnumbernullable
  • heightnumbernullable
  • blurHashstringnullable

    An image's blur-hash placeholder, once computed.

  • errorobjectnullable

    Why it failed; upload_incomplete when the upload was cut off.

    Show 2 child fields
    • codestring
    • messagestring
  • uploadobject

    Where to PUT the bytes, with these headers, before expiresAt; only on a reservation.

    Show 3 child fields
    • urlstring
    • headersobject
    • expiresAtstring
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
PATCH/v1/files/:id
As creatorwrite

Finish or delete an upload

const { data } = await lucra.files.update({
  path: { id: "file_…" },
  body: { status: "processing" },
})

Path parameters

  • idfile_…· required

Body

  • statusenum· required

    processing: the bytes are at upload.url, so verify and store them (images are then ready at once); deleted: cancel the upload, or delete a file nothing uses.

    processingdeleted
Response20015 fieldsShow
  • idfile_…
  • purposeenum
    submissionproduct_imageprofile_pictureprogram_briefprogram_reference_videoagreementchat_attachmentad_creativeprofile_referenceprofile_reference_thumbnail
  • statusenum

    awaiting_upload: reserved, waiting for the bytes at upload.url; processing: being verified or prepared; failed carries why.

    awaiting_uploadprocessingreadyfaileddeleted
  • fileNamestringnullable
  • contentTypestringnullable
  • sizenumbernullable
  • urlstringnullable

    A signed link to the file, valid for about 10 minutes; null until it's ready.

  • widthnumbernullable
  • heightnumbernullable
  • blurHashstringnullable

    An image's blur-hash placeholder, once computed.

  • errorobjectnullable

    Why it failed; upload_incomplete when the upload was cut off.

    Show 2 child fields
    • codestring
    • messagestring
  • uploadobject

    Where to PUT the bytes, with these headers, before expiresAt; only on a reservation.

    Show 3 child fields
    • urlstring
    • headersobject
    • expiresAtstring
  • versioninteger

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

  • createdAtstring
  • updatedAtstring

Messages

GET/v1/messages
As creatorread

List messages

const { data } = await lucra.messages.list({
  query: { thread: "thr_…" },
})

Query parameters

  • threadthr_…

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 12 fields each, and nextCursorShow
  • idstring
  • threadstring
  • senderobject
    Show 4 child fields
    • idstring
    • typeenum
      organizationcreatorsupport
    • namestringnullable
    • avatarstringnullable
  • automatedboolean
  • bodystring
  • filesobject[]
    Show 8 child fields
    • idstring
    • namestring
    • kindenum
      imagevideodocument
    • sizenumbernullable
    • widthnumbernullable
    • heightnumbernullable
    • urlstringnullable
    • thumbnailUrlstringnullable
  • replyTostringnullable
  • reactionsobject[]
    Show 2 child fields
    • emojistring
    • actorsstring[]
  • createdAtstring
  • editedAtstringnullable
  • deletedAtstringnullable
  • versioninteger
POST/v1/messages
As creatorwrite

Send a message

const { data } = await lucra.messages.create({
  body: { thread: "thr_…" },
})

Body

  • threadthr_…· required
  • bodystring
  • filesfile_…[]

    Attachments: chat_attachment files.

  • replyTomsg_…
Response20112 fieldsShow
  • idstring
  • threadstring
  • senderobject
    Show 4 child fields
    • idstring
    • typeenum
      organizationcreatorsupport
    • namestringnullable
    • avatarstringnullable
  • automatedboolean
  • bodystring
  • filesobject[]
    Show 8 child fields
    • idstring
    • namestring
    • kindenum
      imagevideodocument
    • sizenumbernullable
    • widthnumbernullable
    • heightnumbernullable
    • urlstringnullable
    • thumbnailUrlstringnullable
  • replyTostringnullable
  • reactionsobject[]
    Show 2 child fields
    • emojistring
    • actorsstring[]
  • createdAtstring
  • editedAtstringnullable
  • deletedAtstringnullable
  • versioninteger
PATCH/v1/messages/:id
As creatorwrite

Edit or delete a message the caller sent (at its version), react to a message, or report it; one change per request

const { data } = await lucra.messages.update({
  path: { id: "…" },
  body: { version: 1000 },
})

Path parameters

  • idstring· required

Body

  • versioninteger

    The message's version as read; required to edit or delete.

  • bodystring

    New text for a message the caller sent.

  • statusstring

    Delete a message the caller sent.

    deleted
  • reactionobject

    Add or remove the caller's emoji reaction.

    Show 2 child fields
    • emojistring· required
    • activeboolean· required

      true adds the reaction, false removes it.

  • reportobject

    Report the message to Lucra.

    Show 2 child fields
    • reasonenum· required
      spamharassmentunsafe_contentother
    • detailstring
Response20012 fieldsShow
  • idstring
  • threadstring
  • senderobject
    Show 4 child fields
    • idstring
    • typeenum
      organizationcreatorsupport
    • namestringnullable
    • avatarstringnullable
  • automatedboolean
  • bodystring
  • filesobject[]
    Show 8 child fields
    • idstring
    • namestring
    • kindenum
      imagevideodocument
    • sizenumbernullable
    • widthnumbernullable
    • heightnumbernullable
    • urlstringnullable
    • thumbnailUrlstringnullable
  • replyTostringnullable
  • reactionsobject[]
    Show 2 child fields
    • emojistring
    • actorsstring[]
  • createdAtstring
  • editedAtstringnullable
  • deletedAtstringnullable
  • versioninteger

Payments

POST/v1/payments
write

Pay a creator

const { data } = await lucra.payments.create({
  body: { creator: "crtr_…", net: 1000 },
})

Headers

  • Idempotency-Keystring· required

    Unique to this write; resend it to retry safely.

Body

  • creatorcrtr_…· required
  • netinteger· required

    In cents, what the creator receives and the brand is charged.

  • notestring
Response20115 fieldsShow
  • idpay_…
  • creatorcrtr_…
  • amountinteger

    Charged to the brand: what the creator receives (net; Lucra takes no fee), in cents.

  • feeinteger

    Taken from amount, in cents.

  • netinteger

    amount less fee, in cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • statusenum

    pending_approval until the brand approves it, then approved while it's charged; pending until Stripe confirms the charge; then succeeded, or failed with failureMessage. disputed until Lucra decides; refunded if canceled.

    pending_approvalapprovedpendingsucceededfailedrefundeddisputed
  • retainerret_…nullable

    The retainer this is a period payment of, if any.

  • failureMessagestringnullable
  • notestringnullable
  • holdUntilAtstringnullable
  • disputeobjectnullable

    While status is disputed: who opened it and why; null otherwise.

    Show 3 child fields
    • byenum

      brand: the paying brand disputed it; lucra: Lucra holds it for review.

      brandlucra
    • reasonstringnullable

      Why; a Lucra hold's reason shows only to Lucra's admin.

    • openedAtstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
GET/v1/payments
As creatorread

List payments to creators

const { data } = await lucra.payments.list({
  query: { creator: "crtr_…" },
})

Query parameters

  • creatorcrtr_…
  • retainerret_…
  • statusenum

    pending_approval until the brand approves it, then approved while it's charged; pending until Stripe confirms the charge; then succeeded, or failed with failureMessage. disputed until Lucra decides; refunded if canceled.

    pending_approvalapprovedpendingsucceededfailedrefundeddisputed

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 15 fields each, and nextCursorShow
  • idpay_…
  • creatorcrtr_…
  • amountinteger

    Charged to the brand: what the creator receives (net; Lucra takes no fee), in cents.

  • feeinteger

    Taken from amount, in cents.

  • netinteger

    amount less fee, in cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • statusenum

    pending_approval until the brand approves it, then approved while it's charged; pending until Stripe confirms the charge; then succeeded, or failed with failureMessage. disputed until Lucra decides; refunded if canceled.

    pending_approvalapprovedpendingsucceededfailedrefundeddisputed
  • retainerret_…nullable

    The retainer this is a period payment of, if any.

  • failureMessagestringnullable
  • notestringnullable
  • holdUntilAtstringnullable
  • disputeobjectnullable

    While status is disputed: who opened it and why; null otherwise.

    Show 3 child fields
    • byenum

      brand: the paying brand disputed it; lucra: Lucra holds it for review.

      brandlucra
    • reasonstringnullable

      Why; a Lucra hold's reason shows only to Lucra's admin.

    • openedAtstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
GET/v1/payments/:id
As creatorread

Get a payment to a creator

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

Path parameters

  • idpay_…· required
Response20015 fieldsShow
  • idpay_…
  • creatorcrtr_…
  • amountinteger

    Charged to the brand: what the creator receives (net; Lucra takes no fee), in cents.

  • feeinteger

    Taken from amount, in cents.

  • netinteger

    amount less fee, in cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • statusenum

    pending_approval until the brand approves it, then approved while it's charged; pending until Stripe confirms the charge; then succeeded, or failed with failureMessage. disputed until Lucra decides; refunded if canceled.

    pending_approvalapprovedpendingsucceededfailedrefundeddisputed
  • retainerret_…nullable

    The retainer this is a period payment of, if any.

  • failureMessagestringnullable
  • notestringnullable
  • holdUntilAtstringnullable
  • disputeobjectnullable

    While status is disputed: who opened it and why; null otherwise.

    Show 3 child fields
    • byenum

      brand: the paying brand disputed it; lucra: Lucra holds it for review.

      brandlucra
    • reasonstringnullable

      Why; a Lucra hold's reason shows only to Lucra's admin.

    • openedAtstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
PATCH/v1/payments/:id
write

Approve or dispute a payment to a creator

const { data } = await lucra.payments.update({
  path: { id: "pay_…" },
  body: { },
})

Path parameters

  • idpay_…· required

Headers

  • Idempotency-Keystring· required

    Unique to this write; resend it to retry safely.

Response20015 fieldsShow
  • idpay_…
  • creatorcrtr_…
  • amountinteger

    Charged to the brand: what the creator receives (net; Lucra takes no fee), in cents.

  • feeinteger

    Taken from amount, in cents.

  • netinteger

    amount less fee, in cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • statusenum

    pending_approval until the brand approves it, then approved while it's charged; pending until Stripe confirms the charge; then succeeded, or failed with failureMessage. disputed until Lucra decides; refunded if canceled.

    pending_approvalapprovedpendingsucceededfailedrefundeddisputed
  • retainerret_…nullable

    The retainer this is a period payment of, if any.

  • failureMessagestringnullable
  • notestringnullable
  • holdUntilAtstringnullable
  • disputeobjectnullable

    While status is disputed: who opened it and why; null otherwise.

    Show 3 child fields
    • byenum

      brand: the paying brand disputed it; lucra: Lucra holds it for review.

      brandlucra
    • reasonstringnullable

      Why; a Lucra hold's reason shows only to Lucra's admin.

    • openedAtstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring

Payouts

GET/v1/payouts/countries
As creatorread

The payout countries that can be chosen now: a creator's (Stripe Global Payouts' too while it's on), or this brand's or partner's

const { data } = await lucra.payouts.countries.retrieve()
Response2001 fieldsShow
  • countriesenum[]

    The payout countries that can be chosen now. Stripe Global Payouts countries appear only while Lucra has them switched on; brands and partners get Stripe Connect's only.

    ATBEBGCAHRCYCZDKEEFIFRDEGRHUISIEITLVLILTLUMTNLNOPLPTROSKSIESSECHGBUSAUINIDILJPJMMXMCMANZSMSGTT
GET/v1/payouts
As creatorread

List payouts: to creators from this brand's earnings, received by this account, or (as a creator) the creator's own

const { data } = await lucra.payouts.list({
  query: { direction: "sent" },
})

Query parameters

  • directionenum
    sentreceived
  • creatorcrtr_…
  • statusstring

    One or more, comma-separated: pending, submitted, paid, failed, reversed, unknown.

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 12 fields each, and nextCursorShow
  • idpout_…
  • directionenum

    sent: from this brand's earnings to a creator's balance; received: paid to this account's balance, like a partner's commission.

    sentreceived
  • creatorcrtr_…nullable
  • sourcesenum[]
    paid_adsorganicsubmissionprogrambonusretainerreferraladjustmentpartner_commission
  • amountinteger

    The earnings it pays; net is sent to the recipient's Stripe balance, in cents.

  • feeinteger

    Taken from amount, in cents.

  • netinteger

    amount less fee, in cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • statusenum
    pendingsubmittedpaidfailedreversedunknown
  • failureMessagestringnullable
  • createdAtstring
  • updatedAtstring
GET/v1/payouts/:id
As creatorread

Get a payout

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

Path parameters

  • idpout_…· required
Response20012 fieldsShow
  • idpout_…
  • directionenum

    sent: from this brand's earnings to a creator's balance; received: paid to this account's balance, like a partner's commission.

    sentreceived
  • creatorcrtr_…nullable
  • sourcesenum[]
    paid_adsorganicsubmissionprogrambonusretainerreferraladjustmentpartner_commission
  • amountinteger

    The earnings it pays; net is sent to the recipient's Stripe balance, in cents.

  • feeinteger

    Taken from amount, in cents.

  • netinteger

    amount less fee, in cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • statusenum
    pendingsubmittedpaidfailedreversedunknown
  • failureMessagestringnullable
  • createdAtstring
  • updatedAtstring

Earnings

GET/v1/earnings
As creatorread

List a creator's earnings

const { data } = await lucra.earnings.list({
  query: { status: "…" },
})

Query parameters

  • statusstring

    One or more, comma-separated: pending, held, available, paid.

  • sourcestring

    One or more, comma-separated: paid_ads, organic, submission, program, bonus, retainer, referral, adjustment, partner_commission.

  • programprog_…
  • retainerret_…

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 13 fields each, and nextCursorShow
  • idern_…
  • programprog_…nullable
  • accountacct_…

    The brand that paid it.

  • submissionsub_…nullable
  • retainerret_…nullable
  • sourceenum
    paid_adsorganicsubmissionprogrambonusretainerreferraladjustmentpartner_commission
  • amountinteger

    Earned before any partner take rate (fee); the creator receives net, in cents.

  • feeinteger

    Taken from amount, in cents.

  • netinteger

    amount less fee, in cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • statusenum

    pending until the brand's charge succeeds, then available, then paid: sent to the creator's Stripe balance against that charge (once their identity is verified), paid out to their bank weekly or withdrawn anytime. held while a dispute is reviewed, or a referral waits on the payment it comes from.

    pendingheldavailablepaid
  • holdUntilAtstringnullable
  • occurredAtstring
GET/v1/earnings/:id
As creatorread

Get one of a creator's earnings

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

Path parameters

  • idern_…· required
Response20013 fieldsShow
  • idern_…
  • programprog_…nullable
  • accountacct_…

    The brand that paid it.

  • submissionsub_…nullable
  • retainerret_…nullable
  • sourceenum
    paid_adsorganicsubmissionprogrambonusretainerreferraladjustmentpartner_commission
  • amountinteger

    Earned before any partner take rate (fee); the creator receives net, in cents.

  • feeinteger

    Taken from amount, in cents.

  • netinteger

    amount less fee, in cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • statusenum

    pending until the brand's charge succeeds, then available, then paid: sent to the creator's Stripe balance against that charge (once their identity is verified), paid out to their bank weekly or withdrawn anytime. held while a dispute is reviewed, or a referral waits on the payment it comes from.

    pendingheldavailablepaid
  • holdUntilAtstringnullable
  • occurredAtstring

Withdrawals

POST/v1/withdrawals
As creatorwrite

Withdraw from the balance to the bank account or debit card (not for Global Payouts creators, paid every Monday)

const { data } = await lucra.withdrawals.create({
  body: { amount: 1000 },
})

Headers

  • Idempotency-Keystring· required

    Unique to this write; resend it to retry safely.

Body

  • amountinteger

    In cents; defaults to everything withdrawable.

  • speedenum
    standardinstant
Response20111 fieldsShow
  • idwdr_…
  • amountinteger

    Taken from the balance, in cents.

  • feeinteger

    Lucra's fee, taken from the amount: the instant fee, plus the cross-border fee outside the US.

  • netinteger

    amount less fee: what reaches the bank or card, in cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • speedenum
    standardinstant
  • statusenum

    in_transit once Stripe accepted it; paid when it reached the bank.

    pendingin_transitpaidfailed
  • failureMessagestringnullable
  • arrivesAtstringnullable
  • createdAtstring
  • updatedAtstring
GET/v1/withdrawals
As creatorread

List withdrawals from the balance, or a Global Payouts creator's weekly payouts

const { data } = await lucra.withdrawals.list({
  query: { status: "…" },
})

Query parameters

  • statusstring

    One or more, comma-separated: pending, in_transit, paid, failed.

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 11 fields each, and nextCursorShow
  • idwdr_…
  • amountinteger

    Taken from the balance, in cents.

  • feeinteger

    Lucra's fee, taken from the amount: the instant fee, plus the cross-border fee outside the US.

  • netinteger

    amount less fee: what reaches the bank or card, in cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • speedenum
    standardinstant
  • statusenum

    in_transit once Stripe accepted it; paid when it reached the bank.

    pendingin_transitpaidfailed
  • failureMessagestringnullable
  • arrivesAtstringnullable
  • createdAtstring
  • updatedAtstring
GET/v1/withdrawals/:id
As creatorread

Get a withdrawal

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

Path parameters

  • idwdr_…· required
Response20011 fieldsShow
  • idwdr_…
  • amountinteger

    Taken from the balance, in cents.

  • feeinteger

    Lucra's fee, taken from the amount: the instant fee, plus the cross-border fee outside the US.

  • netinteger

    amount less fee: what reaches the bank or card, in cents.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • speedenum
    standardinstant
  • statusenum

    in_transit once Stripe accepted it; paid when it reached the bank.

    pendingin_transitpaidfailed
  • failureMessagestringnullable
  • arrivesAtstringnullable
  • createdAtstring
  • updatedAtstring

Cities

GET/v1/cities
As creatorread

Search cities by name, exact matches first

const { data } = await lucra.cities.list({
  query: { q: "…" },
})

Query parameters

  • qstring· required

    A city name, or the start of one.

  • countrystring

    Only cities in this country (ISO 3166-1 alpha-2, e.g. US).

  • limitinteger

    Cities per page.

  • cursorstring

    nextCursor from the previous page, with the same q and country.

Response200A page of items, 12 fields each, and nextCursorShow
  • geonamesIdstring
  • namestring
  • displayNamestring
  • citystring
  • regionstringnullable
  • regionCodestringnullable
  • regionNamestringnullable
  • countryCodestring
  • countryNamestring
  • latitudenumber
  • longitudenumber
  • timeZonestring

Keys

GET/v1/keys/current
read

Get the calling key's webhook URL

const { data } = await lucra.keys.current.retrieve()
Response2003 fieldsShow
  • keykey_…
  • webhookUrlstringnullable

    Where this key's events are POSTed; null sends none.

  • webhookSecretstringnullable

    The secret that signs Lucra-Signature, shown once: when a URL is set. Null otherwise.

PATCH/v1/keys/current
write

Set or clear the calling key's webhook URL; setting one issues a new signing secret, in this response only

const { data } = await lucra.keys.current.update({
  body: { webhookUrl: "…" },
})

Body

  • webhookUrlstringnullable· required

    A public https:// URL to POST this key's events to, or null to stop sending them.

Response2003 fieldsShow
  • keykey_…
  • webhookUrlstringnullable

    Where this key's events are POSTed; null sends none.

  • webhookSecretstringnullable

    The secret that signs Lucra-Signature, shown once: when a URL is set. Null otherwise.

Events

GET/v1/events
read

List the events sent to this key's webhook, newest first, to replay missed ones

const { data } = await lucra.events.list()

Query parameters

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 6 fields each, and nextCursorShow
  • idevt_…
  • typestring

    <resource>.<past tense>, as the webhook names it.

  • createdAtstring
  • accountacct_…nullable
  • dataobject

    IDs of the records involved, keyed by kind, e.g. { creator: "crtr_…" }.

  • deliveryenum

    Whether the POST to the webhook URL succeeded; failed after three days of retries.

    pendingdeliveredfailed

Agreements

GET/v1/agreements/acceptances
As creatorread

List creators' acceptances of your agreements; as a creator, the ones you accepted and the ones waiting on you

const { data } = await lucra.agreements.acceptances.list({
  query: { agreement: "agr_…" },
})

Query parameters

  • agreementagr_…
  • creatorcrtr_…
  • statusenum

    pending: offers and invitations waiting on a creator; only a creator lists these.

    acceptedpending

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 13 fields each, and nextCursorShow
  • idagac_…
  • statusenum
    acceptedpending
  • accountacct_…

    The brand whose agreement it is.

  • brandNamestring
  • creatorcrtr_…
  • creatorNamestringnullable
  • contextenum
    creator_relationshipprogram_applicationprogram_enrollmentretainercontent_submission
  • programprog_…nullable
  • retainerret_…nullable
  • titlestring
  • documentanynullable

    The version accepted; null while pending.

  • acceptedAtstringnullable
  • createdAtstring
GET/v1/agreements
read

List agreements

const { data } = await lucra.agreements.list({
  query: { status: "…" },
})

Query parameters

  • statusstring

    One or more, comma-separated: active, archived.

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 11 fields each, and nextCursorShow
  • idagr_…
  • titlestring
  • descriptionstringnullable
  • statusenum
    activearchived
  • applicabilityenum[]

    Where every creator must accept it: creator_relationship, program_application, program_enrollment, retainer or content_submission.

    creator_relationshipprogram_applicationprogram_enrollmentretainercontent_submission
  • latestVersionobjectnullable

    Every version: GET /v1/agreements/:id/versions.

    Show 9 child fields
    • agreementagr_…
    • versioninteger
    • filefile_…nullable
    • fileNamestring
    • sizeinteger
    • sha256string
    • applicabilityenum[]
      creator_relationshipprogram_applicationprogram_enrollmentretainercontent_submission
    • createdAtstring
    • urlstringnullable

      A short-lived link to the PDF.

  • acceptedCountinteger

    Creators who accepted a version; each acceptance: GET /v1/agreements/acceptances?agreement=…

  • pendingCountinteger
  • versioninteger

    Send it back as version to reject a change based on a stale read.

  • createdAtstring
  • updatedAtstring
GET/v1/agreements/:id
read

Get an agreement

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

Path parameters

  • idagr_…· required
Response20011 fieldsShow
  • idagr_…
  • titlestring
  • descriptionstringnullable
  • statusenum
    activearchived
  • applicabilityenum[]

    Where every creator must accept it: creator_relationship, program_application, program_enrollment, retainer or content_submission.

    creator_relationshipprogram_applicationprogram_enrollmentretainercontent_submission
  • latestVersionobjectnullable

    Every version: GET /v1/agreements/:id/versions.

    Show 9 child fields
    • agreementagr_…
    • versioninteger
    • filefile_…nullable
    • fileNamestring
    • sizeinteger
    • sha256string
    • applicabilityenum[]
      creator_relationshipprogram_applicationprogram_enrollmentretainercontent_submission
    • createdAtstring
    • urlstringnullable

      A short-lived link to the PDF.

  • acceptedCountinteger

    Creators who accepted a version; each acceptance: GET /v1/agreements/acceptances?agreement=…

  • pendingCountinteger
  • versioninteger

    Send it back as version to reject a change based on a stale read.

  • createdAtstring
  • updatedAtstring
GET/v1/agreements/:id/versions
read

List an agreement's versions, newest first

const { data } = await lucra.agreements.versions.list({
  path: { id: "agr_…" },
})

Path parameters

  • idagr_…· required

Query parameters

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 9 fields each, and nextCursorShow
  • agreementagr_…
  • versioninteger
  • filefile_…nullable
  • fileNamestring
  • sizeinteger
  • sha256string
  • applicabilityenum[]
    creator_relationshipprogram_applicationprogram_enrollmentretainercontent_submission
  • createdAtstring
  • urlstringnullable

    A short-lived link to the PDF.

GET/v1/agreements/:id/versions/:number
read

Get a version of an agreement by its number

const { data } = await lucra.agreements.versions.retrieve({
  path: { id: "agr_…", number: "…" },
})

Path parameters

  • idagr_…· required
  • numberstring· required
Response2009 fieldsShow
  • agreementagr_…
  • versioninteger
  • filefile_…nullable
  • fileNamestring
  • sizeinteger
  • sha256string
  • applicabilityenum[]
    creator_relationshipprogram_applicationprogram_enrollmentretainercontent_submission
  • createdAtstring
  • urlstringnullable

    A short-lived link to the PDF.

POST/v1/agreements
write

Publish an agreement

const { data } = await lucra.agreements.create({
  body: { file: "file_…", title: "…" },
})

Body

  • filefile_…· required

    A ready PDF uploaded with POST /v1/files?purpose=agreement.

  • titlestring· required
  • descriptionstringnullable
  • applicabilityenum[]

    Where every creator must accept it; empty (the default) for an agreement only the programs that list it require.

    creator_relationshipprogram_applicationprogram_enrollmentretainercontent_submission
Response20111 fieldsShow
  • idagr_…
  • titlestring
  • descriptionstringnullable
  • statusenum
    activearchived
  • applicabilityenum[]

    Where every creator must accept it: creator_relationship, program_application, program_enrollment, retainer or content_submission.

    creator_relationshipprogram_applicationprogram_enrollmentretainercontent_submission
  • latestVersionobjectnullable

    Every version: GET /v1/agreements/:id/versions.

    Show 9 child fields
    • agreementagr_…
    • versioninteger
    • filefile_…nullable
    • fileNamestring
    • sizeinteger
    • sha256string
    • applicabilityenum[]
      creator_relationshipprogram_applicationprogram_enrollmentretainercontent_submission
    • createdAtstring
    • urlstringnullable

      A short-lived link to the PDF.

  • acceptedCountinteger

    Creators who accepted a version; each acceptance: GET /v1/agreements/acceptances?agreement=…

  • pendingCountinteger
  • versioninteger

    Send it back as version to reject a change based on a stale read.

  • createdAtstring
  • updatedAtstring
POST/v1/agreements/:id/versions
write

Publish a new version of an agreement

const { data } = await lucra.agreements.versions.create({
  path: { id: "agr_…" },
  body: { file: "file_…", title: "…" },
})

Path parameters

  • idagr_…· required

Body

  • filefile_…· required

    A ready PDF uploaded with POST /v1/files?purpose=agreement.

  • titlestring· required
  • descriptionstringnullable
  • applicabilityenum[]

    Where every creator must accept it; empty (the default) for an agreement only the programs that list it require.

    creator_relationshipprogram_applicationprogram_enrollmentretainercontent_submission
  • versioninteger
Response20111 fieldsShow
  • idagr_…
  • titlestring
  • descriptionstringnullable
  • statusenum
    activearchived
  • applicabilityenum[]

    Where every creator must accept it: creator_relationship, program_application, program_enrollment, retainer or content_submission.

    creator_relationshipprogram_applicationprogram_enrollmentretainercontent_submission
  • latestVersionobjectnullable

    Every version: GET /v1/agreements/:id/versions.

    Show 9 child fields
    • agreementagr_…
    • versioninteger
    • filefile_…nullable
    • fileNamestring
    • sizeinteger
    • sha256string
    • applicabilityenum[]
      creator_relationshipprogram_applicationprogram_enrollmentretainercontent_submission
    • createdAtstring
    • urlstringnullable

      A short-lived link to the PDF.

  • acceptedCountinteger

    Creators who accepted a version; each acceptance: GET /v1/agreements/acceptances?agreement=…

  • pendingCountinteger
  • versioninteger

    Send it back as version to reject a change based on a stale read.

  • createdAtstring
  • updatedAtstring
PATCH/v1/agreements/:id
write

Change where an agreement is required, or archive it

const { data } = await lucra.agreements.update({
  path: { id: "agr_…" },
  body: { applicability: ["creator_relationship"] },
})

Path parameters

  • idagr_…· required

Body

  • applicabilityenum[]
    creator_relationshipprogram_applicationprogram_enrollmentretainercontent_submission
  • statusstring
    archived
  • versioninteger
Response20011 fieldsShow
  • idagr_…
  • titlestring
  • descriptionstringnullable
  • statusenum
    activearchived
  • applicabilityenum[]

    Where every creator must accept it: creator_relationship, program_application, program_enrollment, retainer or content_submission.

    creator_relationshipprogram_applicationprogram_enrollmentretainercontent_submission
  • latestVersionobjectnullable

    Every version: GET /v1/agreements/:id/versions.

    Show 9 child fields
    • agreementagr_…
    • versioninteger
    • filefile_…nullable
    • fileNamestring
    • sizeinteger
    • sha256string
    • applicabilityenum[]
      creator_relationshipprogram_applicationprogram_enrollmentretainercontent_submission
    • createdAtstring
    • urlstringnullable

      A short-lived link to the PDF.

  • acceptedCountinteger

    Creators who accepted a version; each acceptance: GET /v1/agreements/acceptances?agreement=…

  • pendingCountinteger
  • versioninteger

    Send it back as version to reject a change based on a stale read.

  • createdAtstring
  • updatedAtstring

Threads

GET/v1/threads
As creatorread

List the conversations the account (or, acting as a creator, the creator) takes part in, most recently active first

const { data } = await lucra.threads.list({
  query: { kind: "direct" },
})

Query parameters

  • kindenum
    directprogramsupport
  • programprog_…

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 15 fields each, and nextCursorShow
  • idstring
  • kindenum
    directprogramsupport
  • accountstringnullable
  • programstringnullable
  • programNamestringnullable
  • supportobjectnullable
    Show 2 child fields
    • statusenum
      waiting_on_lucrawaiting_on_customerresolved
    • resolvedAtstringnullable
  • participantsobject[]
    Show 3 child fields
    • actorobject
      Show 4 child fields
      • idstring
      • typeenum
        organizationcreatorsupport
      • namestringnullable
      • avatarstringnullable
    • lastReadstringnullable
    • joinedAtstring
  • lastMessageobjectnullable
    Show 12 child fields
    • idstring
    • threadstring
    • senderobject
      Show 4 child fields
      • idstring
      • typeenum
        organizationcreatorsupport
      • namestringnullable
      • avatarstringnullable
    • automatedboolean
    • bodystring
    • filesobject[]
      Show 8 child fields
      • idstring
      • namestring
      • kindenum
        imagevideodocument
      • sizenumbernullable
      • widthnumbernullable
      • heightnumbernullable
      • urlstringnullable
      • thumbnailUrlstringnullable
    • replyTostringnullable
    • reactionsobject[]
      Show 2 child fields
      • emojistring
      • actorsstring[]
    • createdAtstring
    • editedAtstringnullable
    • deletedAtstringnullable
    • versioninteger
  • mutedboolean
  • blockedstring[]
  • canSendboolean
  • unreadCountinteger
  • createdAtstring
  • updatedAtstring
  • versioninteger
POST/v1/threads
As creatorwrite

Open a direct conversation with an account or creator you work with (an account can also message any creator it finds in the marketplace), a program's group chat or a Lucra Support thread; an existing one is returned

const { data } = await lucra.threads.create({
  body: { kind: "direct" },
})

Body

  • kindenum· required

    direct: one account or creator; program: a program's group chat; support: Lucra Support.

    directprogramsupport
  • withstring

    direct: the account (acct_) or creator (crtr_) to talk to; a creator must work with the account (and the reverse).

  • programstring

    program: the program (prog_) whose group chat to open.

  • messageobject

    A first message, sent when the conversation is new.

    Show 2 child fields
    • bodystring

      The message text.

    • filesstring[]

      Attachments: chat_attachment files (file_).

Response20115 fieldsShow
  • idstring
  • kindenum
    directprogramsupport
  • accountstringnullable
  • programstringnullable
  • programNamestringnullable
  • supportobjectnullable
    Show 2 child fields
    • statusenum
      waiting_on_lucrawaiting_on_customerresolved
    • resolvedAtstringnullable
  • participantsobject[]
    Show 3 child fields
    • actorobject
      Show 4 child fields
      • idstring
      • typeenum
        organizationcreatorsupport
      • namestringnullable
      • avatarstringnullable
    • lastReadstringnullable
    • joinedAtstring
  • lastMessageobjectnullable
    Show 12 child fields
    • idstring
    • threadstring
    • senderobject
      Show 4 child fields
      • idstring
      • typeenum
        organizationcreatorsupport
      • namestringnullable
      • avatarstringnullable
    • automatedboolean
    • bodystring
    • filesobject[]
      Show 8 child fields
      • idstring
      • namestring
      • kindenum
        imagevideodocument
      • sizenumbernullable
      • widthnumbernullable
      • heightnumbernullable
      • urlstringnullable
      • thumbnailUrlstringnullable
    • replyTostringnullable
    • reactionsobject[]
      Show 2 child fields
      • emojistring
      • actorsstring[]
    • createdAtstring
    • editedAtstringnullable
    • deletedAtstringnullable
    • versioninteger
  • mutedboolean
  • blockedstring[]
  • canSendboolean
  • unreadCountinteger
  • createdAtstring
  • updatedAtstring
  • versioninteger
GET/v1/threads/:id
As creatorread

Get a conversation; its messages are GET /v1/messages?thread=

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

Path parameters

  • idstring· required
Response20015 fieldsShow
  • idstring
  • kindenum
    directprogramsupport
  • accountstringnullable
  • programstringnullable
  • programNamestringnullable
  • supportobjectnullable
    Show 2 child fields
    • statusenum
      waiting_on_lucrawaiting_on_customerresolved
    • resolvedAtstringnullable
  • participantsobject[]
    Show 3 child fields
    • actorobject
      Show 4 child fields
      • idstring
      • typeenum
        organizationcreatorsupport
      • namestringnullable
      • avatarstringnullable
    • lastReadstringnullable
    • joinedAtstring
  • lastMessageobjectnullable
    Show 12 child fields
    • idstring
    • threadstring
    • senderobject
      Show 4 child fields
      • idstring
      • typeenum
        organizationcreatorsupport
      • namestringnullable
      • avatarstringnullable
    • automatedboolean
    • bodystring
    • filesobject[]
      Show 8 child fields
      • idstring
      • namestring
      • kindenum
        imagevideodocument
      • sizenumbernullable
      • widthnumbernullable
      • heightnumbernullable
      • urlstringnullable
      • thumbnailUrlstringnullable
    • replyTostringnullable
    • reactionsobject[]
      Show 2 child fields
      • emojistring
      • actorsstring[]
    • createdAtstring
    • editedAtstringnullable
    • deletedAtstringnullable
    • versioninteger
  • mutedboolean
  • blockedstring[]
  • canSendboolean
  • unreadCountinteger
  • createdAtstring
  • updatedAtstring
  • versioninteger

Posts

GET/v1/posts
read

List creators' posts in organic programs

const { data } = await lucra.posts.list({
  query: { program: "prog_…" },
})

Query parameters

  • programprog_…
  • creatorcrtr_…
  • platformenum
    instagramtiktok
  • statusstring

    Defaults to every status but archived.

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 26 fields each, and nextCursorShow
  • idpost_…
  • submissionsub_…
  • creatorcrtr_…
  • programprog_…
  • connectionconn_…nullable
  • titlestring
  • creatorNamestring
  • handlestring
  • platformenum
    instagramtiktok
  • programNamestring
  • productprod_…nullable
  • urlstringnullable
  • videoUrlstringnullable
  • thumbnailUrlstringnullable
  • statusenum

    tracking (views being measured), ready_for_review, approved (reviewed; its payment waits on approval), payment_approved, paid or rejected; archived once hidden from the brand's view.

    trackingready_for_reviewapprovedpayment_approvedpaidrejectedarchived
  • confidenceenum

    The fraud check on the post's views.

    looks_goodneeds_reviewnot_enough_data
  • reasonstring
  • amountinteger

    What the creator earns (net); an estimate while the post is tracking.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • eligibleViewsnumbernullable
  • tagsobject[]

    Each tag with the color it was assigned with.

    Show 2 child fields
    • namestring
    • colorenum
      greydark_greypurpletealgreenyelloworangepink
  • dailyobject[]
    Show 6 child fields
    • datestring
    • viewsnumber
    • engagementsnumbernullable
    • likesnumbernullable
    • commentsnumbernullable
    • sharesnumbernullable
  • evidenceany

    On GET /v1/posts/:id: the claim's measurement windows, hourly snapshots, risk reasons, review history and payout account status.

  • versioninteger

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

  • createdAtstring
  • updatedAtstring
GET/v1/posts/:id
read

Get a post with its claim evidence

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

Path parameters

  • idpost_…· required
Response20026 fieldsShow
  • idpost_…
  • submissionsub_…
  • creatorcrtr_…
  • programprog_…
  • connectionconn_…nullable
  • titlestring
  • creatorNamestring
  • handlestring
  • platformenum
    instagramtiktok
  • programNamestring
  • productprod_…nullable
  • urlstringnullable
  • videoUrlstringnullable
  • thumbnailUrlstringnullable
  • statusenum

    tracking (views being measured), ready_for_review, approved (reviewed; its payment waits on approval), payment_approved, paid or rejected; archived once hidden from the brand's view.

    trackingready_for_reviewapprovedpayment_approvedpaidrejectedarchived
  • confidenceenum

    The fraud check on the post's views.

    looks_goodneeds_reviewnot_enough_data
  • reasonstring
  • amountinteger

    What the creator earns (net); an estimate while the post is tracking.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • eligibleViewsnumbernullable
  • tagsobject[]

    Each tag with the color it was assigned with.

    Show 2 child fields
    • namestring
    • colorenum
      greydark_greypurpletealgreenyelloworangepink
  • dailyobject[]
    Show 6 child fields
    • datestring
    • viewsnumber
    • engagementsnumbernullable
    • likesnumbernullable
    • commentsnumbernullable
    • sharesnumbernullable
  • evidenceany

    On GET /v1/posts/:id: the claim's measurement windows, hourly snapshots, risk reasons, review history and payout account status.

  • versioninteger

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

  • createdAtstring
  • updatedAtstring
PATCH/v1/posts/:id
write

Tag or archive a post

const { data } = await lucra.posts.update({
  path: { id: "post_…" },
  body: { version: 1000 },
})

Path parameters

  • idpost_…· required

Body

  • versioninteger
  • tagobject
    Show 2 child fields
    • namestring· required
    • colorenum· required
      greydark_greypurpletealgreenyelloworangepink
  • assignedboolean

    With tag: add (true) or remove (false) it.

  • statusstring

    Hides the post from the brand's view.

    archived
Response20026 fieldsShow
  • idpost_…
  • submissionsub_…
  • creatorcrtr_…
  • programprog_…
  • connectionconn_…nullable
  • titlestring
  • creatorNamestring
  • handlestring
  • platformenum
    instagramtiktok
  • programNamestring
  • productprod_…nullable
  • urlstringnullable
  • videoUrlstringnullable
  • thumbnailUrlstringnullable
  • statusenum

    tracking (views being measured), ready_for_review, approved (reviewed; its payment waits on approval), payment_approved, paid or rejected; archived once hidden from the brand's view.

    trackingready_for_reviewapprovedpayment_approvedpaidrejectedarchived
  • confidenceenum

    The fraud check on the post's views.

    looks_goodneeds_reviewnot_enough_data
  • reasonstring
  • amountinteger

    What the creator earns (net); an estimate while the post is tracking.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • eligibleViewsnumbernullable
  • tagsobject[]

    Each tag with the color it was assigned with.

    Show 2 child fields
    • namestring
    • colorenum
      greydark_greypurpletealgreenyelloworangepink
  • dailyobject[]
    Show 6 child fields
    • datestring
    • viewsnumber
    • engagementsnumbernullable
    • likesnumbernullable
    • commentsnumbernullable
    • sharesnumbernullable
  • evidenceany

    On GET /v1/posts/:id: the claim's measurement windows, hourly snapshots, risk reasons, review history and payout account status.

  • versioninteger

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

  • createdAtstring
  • updatedAtstring

Ad authorizations

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
    metatiktok
  • statusstring

    One or more, comma-separated: requested, granted, revoked, expired.

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 16 fields each, and nextCursorShow
  • idadauth_…
  • submissionsub_…
  • creatorcrtr_…nullable
  • accountacct_…

    The brand that asks.

  • brandNamestring
  • platformenum
    metatiktok
  • 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, a link the creator opens, without a Lucra account, to send their Spark code.

  • 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
Response20016 fieldsShow
  • idadauth_…
  • submissionsub_…
  • creatorcrtr_…nullable
  • accountacct_…

    The brand that asks.

  • brandNamestring
  • platformenum
    metatiktok
  • 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, a link the creator opens, without a Lucra account, to send their Spark code.

  • 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 submission's creator to authorize it as a Meta partnership ad, or an existing TikTok post's creator for a Spark code

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
    metatiktok
Response20116 fieldsShow
  • idadauth_…
  • submissionsub_…
  • creatorcrtr_…nullable
  • accountacct_…

    The brand that asks.

  • brandNamestring
  • platformenum
    metatiktok
  • 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, a link the creator opens, without a Lucra account, to send their Spark code.

  • 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
  • sparkCodestring

    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
Response20016 fieldsShow
  • idadauth_…
  • submissionsub_…
  • creatorcrtr_…nullable
  • accountacct_…

    The brand that asks.

  • brandNamestring
  • platformenum
    metatiktok
  • 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, a link the creator opens, without a Lucra account, to send their Spark code.

  • 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

Pixels

POST/v1/pixels
write

Create a pixel

const { data } = await lucra.pixels.create({
  body: { name: "…", domains: ["…"] },
})

Body

  • namestring· required
  • domainsstring[]· required

    Origins the pixel may send from, like https://shop.example.com.

  • excludedCountriesstring[]

    Countries (ISO 3166-1 alpha-2) whose visitors the pixel doesn't record, decided by the visitor's IP country.

Response20112 fieldsShow
  • idpxl_…
  • namestring
  • domainsstring[]
  • excludedCountriesstring[]
  • statusenum

    verified once the first event arrives from an allowed domain; archived pixels accept no events.

    waitingverifiedarchived
  • lastSeenAtstringnullable
  • snippetstring

    Paste before </head> on every page of the allowed domains.

  • firstPartyobject

    Recommended: proxy path on your site to target (a rewrite in Next.js, Vercel, Cloudflare or nginx) and use this snippet instead. The pixel then keeps visitors' attribution in a first-party cookie, so Safari doesn't forget them after 7 days.

    Show 3 child fields
    • pathstring
    • targetstring
    • snippetstring
  • qualityobject

    Of the last 7 days' events: how many had consent, came from your server, carried user data or ad click IDs, were credited to a creator, and have a location.

    Show 7 child fields
    • eventsinteger
    • consentedinteger
    • fromServerinteger
    • withUserDatainteger
    • withClickIdsinteger
    • creditedinteger
    • locatedinteger
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
POST/v1/pixels/:id/events
write

Send a conversion from the brand's server; 202 once it's recorded for attribution

const { data } = await lucra.pixels.events.create({
  path: { id: "pxl_…" },
  body: { name: "…" },
})

Path parameters

  • idpxl_…· required

Body

  • namestring· required

    A standard event (page_view, view_content, search, add_to_cart, begin_checkout, purchase, lead, sign_up, start_trial, subscribe, contact) or your own, in snake_case.

  • occurredAtstring

    Defaults to now; must be within the last 7 days.

  • orderIdstring
  • valueinteger

    In cents, with its currency.

  • currencystring

    ISO 4217, in either case (usd or USD).

  • consentenum

    Recorded by default, like the browser pixel; send denied or unknown when the visitor declined, and leave out lucraId, campaign, attributionId and clickId.

    granteddeniedunknown
  • lucraIdstring

    lucra_id from the landing URL: the video (submission) the visitor came from.

  • campaignstring

    lucra_campaign from the landing URL: the paid campaign (camp_…) whose ad the visitor came from.

  • attributionIdstring

    lucra_attribution_id from older landing URLs; send lucraId for new ones.

  • clickIdstring
  • eventIdstring

    Send the browser event's ID to count a conversion once when both fire.

  • pageUrlstring

    The page the conversion happened on; defaults to the pixel's first domain.

  • propertiesobject
    Show 5 child fields
    • productIdstring
    • quantityinteger
    • variantIdstring
    • contentsobject[]
      Show 3 child fields
      • idstring· required
      • quantityinteger
      • priceinteger

        Per item, in cents, in the event's currency.

    • customobject
  • actionSourceenum

    Where the conversion happened.

    websiteappphysical_storephone_callchatemailsystem_generatedother
  • landedAtstring

    When the visitor arrived from the video (lucra_id), for conversion attribution windows.

  • userobject

    For matching on ad platforms: hashed (SHA-256) on arrival, never stored raw; already-hashed values are kept.

    Show 9 child fields
    • emailstring
    • phonestring
    • firstNamestring
    • lastNamestring
    • citystring
    • statestring
    • zipstring
    • countrystring
    • externalIdstring
  • clickIdsobject

    Ad click IDs and platform cookies from the visitor's browser.

    Show 9 child fields
    • fbcstring
    • fbpstring
    • gclidstring
    • gbraidstring
    • wbraidstring
    • ttclidstring
    • ttpstring
    • sccidstring
    • scidstring
  • ipAddressstring

    The visitor's IP address; kept 13 months.

  • userAgentstring

    The visitor's browser user agent, for their device and in-app browser.

  • creatorCodestring

    The creator's code from the landing URL (?lucra=CODE).

  • discountCodestring

    The order's discount code, recorded with the event.

  • locationobject

    Where the customer is, like the order's shipping address.

    Show 4 child fields
    • countrystring
    • regionstring
    • citystring
    • postalCodestring
GET/v1/pixels
read

List pixels

const { data } = await lucra.pixels.list()

Query parameters

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 12 fields each, and nextCursorShow
  • idpxl_…
  • namestring
  • domainsstring[]
  • excludedCountriesstring[]
  • statusenum

    verified once the first event arrives from an allowed domain; archived pixels accept no events.

    waitingverifiedarchived
  • lastSeenAtstringnullable
  • snippetstring

    Paste before </head> on every page of the allowed domains.

  • firstPartyobject

    Recommended: proxy path on your site to target (a rewrite in Next.js, Vercel, Cloudflare or nginx) and use this snippet instead. The pixel then keeps visitors' attribution in a first-party cookie, so Safari doesn't forget them after 7 days.

    Show 3 child fields
    • pathstring
    • targetstring
    • snippetstring
  • qualityobject

    Of the last 7 days' events: how many had consent, came from your server, carried user data or ad click IDs, were credited to a creator, and have a location.

    Show 7 child fields
    • eventsinteger
    • consentedinteger
    • fromServerinteger
    • withUserDatainteger
    • withClickIdsinteger
    • creditedinteger
    • locatedinteger
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
GET/v1/pixels/:id
read

Get a pixel and whether it's verified

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

Path parameters

  • idpxl_…· required
Response20012 fieldsShow
  • idpxl_…
  • namestring
  • domainsstring[]
  • excludedCountriesstring[]
  • statusenum

    verified once the first event arrives from an allowed domain; archived pixels accept no events.

    waitingverifiedarchived
  • lastSeenAtstringnullable
  • snippetstring

    Paste before </head> on every page of the allowed domains.

  • firstPartyobject

    Recommended: proxy path on your site to target (a rewrite in Next.js, Vercel, Cloudflare or nginx) and use this snippet instead. The pixel then keeps visitors' attribution in a first-party cookie, so Safari doesn't forget them after 7 days.

    Show 3 child fields
    • pathstring
    • targetstring
    • snippetstring
  • qualityobject

    Of the last 7 days' events: how many had consent, came from your server, carried user data or ad click IDs, were credited to a creator, and have a location.

    Show 7 child fields
    • eventsinteger
    • consentedinteger
    • fromServerinteger
    • withUserDatainteger
    • withClickIdsinteger
    • creditedinteger
    • locatedinteger
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
PATCH/v1/pixels/:id
write

Rename a pixel, change its domains or excluded countries, or archive it

const { data } = await lucra.pixels.update({
  path: { id: "pxl_…" },
  body: { name: "…" },
})

Path parameters

  • idpxl_…· required

Body

  • namestring
  • domainsstring[]

    Origins the pixel may send from, like https://shop.example.com.

  • excludedCountriesstring[]

    Countries (ISO 3166-1 alpha-2) whose visitors the pixel doesn't record, decided by the visitor's IP country.

  • statusstring

    Stops the pixel accepting events; its history stays.

    archived
  • versioninteger
Response20012 fieldsShow
  • idpxl_…
  • namestring
  • domainsstring[]
  • excludedCountriesstring[]
  • statusenum

    verified once the first event arrives from an allowed domain; archived pixels accept no events.

    waitingverifiedarchived
  • lastSeenAtstringnullable
  • snippetstring

    Paste before </head> on every page of the allowed domains.

  • firstPartyobject

    Recommended: proxy path on your site to target (a rewrite in Next.js, Vercel, Cloudflare or nginx) and use this snippet instead. The pixel then keeps visitors' attribution in a first-party cookie, so Safari doesn't forget them after 7 days.

    Show 3 child fields
    • pathstring
    • targetstring
    • snippetstring
  • qualityobject

    Of the last 7 days' events: how many had consent, came from your server, carried user data or ad click IDs, were credited to a creator, and have a location.

    Show 7 child fields
    • eventsinteger
    • consentedinteger
    • fromServerinteger
    • withUserDatainteger
    • withClickIdsinteger
    • creditedinteger
    • locatedinteger
  • versioninteger

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

  • createdAtstring
  • updatedAtstring

Conversions

POST/v1/conversions
write

Create a conversion: the events that count as a sign-up, a purchase or your own goal

const { data } = await lucra.conversions.create({
  body: { name: "…", eventName: "…" },
})

Body

  • namestring· required
  • eventNamestring· required

    The event that counts: a standard one (purchase, sign_up, lead…) or your own.

  • pageUrlContainsstringnullable

    Only events on pages whose URL contains this (case-insensitive).

  • minValueobject

    Only events in this currency with at least this value count.

    Show 2 child fields
    • amountinteger· required

      In cents.

    • currencystring· required

      ISO 4217, in either case.

  • attributionWindowDaysinteger

    Credits the video when the visitor converts within this many days of landing from it.

  • payBrowserEventsboolean

    Pay creators on events only the browser sent. Anyone with your pixel ID can forge those, so by default only events your server or Shopify confirmed pay.

GET/v1/conversions
read

List conversions, newest first

const { data } = await lucra.conversions.list()

Query parameters

Plus paging: limit, cursor, createdAfter and createdBefore.

GET/v1/conversions/:id
read

Get a conversion and how many events counted as it

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

Path parameters

  • idstring· required
PATCH/v1/conversions/:id
write

Change a conversion or archive it; events already recorded keep counting as they did

const { data } = await lucra.conversions.update({
  path: { id: "…" },
  body: { name: "…" },
})

Path parameters

  • idstring· required

Body

  • namestring
  • eventNamestring

    The event that counts: a standard one (purchase, sign_up, lead…) or your own.

  • pageUrlContainsstringnullable

    Only events on pages whose URL contains this (case-insensitive).

  • minValueobjectnullable
    Show 2 child fields
    • amountinteger· required

      In cents.

    • currencystring· required

      ISO 4217, in either case.

  • attributionWindowDaysinteger

    Credits the video when the visitor converts within this many days of landing from it.

  • payBrowserEventsboolean

    Pay creators on events only the browser sent. Anyone with your pixel ID can forge those, so by default only events your server or Shopify confirmed pay.

  • statusenum
    activearchived
  • versioninteger
GET/v1/conversions/:id/report
read

Break a conversion down by creator, place, in-app browser, source or day, with counts and value

const { data } = await lucra.conversions.report.retrieve({
  path: { id: "…" },
  query: { groupBy: "…" },
})

Path parameters

  • idstring· required

Query parameters

  • groupBystring· required

    Up to 3, comma-separated: creator, country, region, city, inApp, deviceType, source, day.

  • fromstring

    Only conversions at or after this time.

  • tostring

    Only conversions before this time.

  • creditedenum

    true: only conversions credited to a creator.

    truefalse
Response2001 fieldsShow
  • dataany[]

Pixel events

GET/v1/pixel-events
read

List the events your pixels received, newest first

const { data } = await lucra.pixelEvents.list({
  query: { pixel: "pxl_…" },
})

Query parameters

  • pixelpxl_…
  • conversionconv_…
  • attributedenum

    true: only events credited to a creator (their video or their code).

    truefalse

Plus paging: limit, cursor, createdAfter and createdBefore.

GET/v1/pixel-events/:id
read

Get one pixel event, with what ad platforms' conversion APIs take

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

Path parameters

  • idstring· required

Embeds

POST/v1/embeds
As creatorwrite

Open Lucra UI for a brand or creator, hosted or embedded

const { data } = await lucra.embeds.create({
  body: { components: ["onboarding"] },
})

Body

  • componentsenum[]· required

    What the embed can show. programs, payments and ads are for brands; creator_programs and wallet are for creators; onboarding and messages are for either.

    onboardingcreator_programswalletprogramspaymentsadsmessages
  • openenum

    The component the hosted url opens; defaults to the first in components.

    onboardingcreator_programswalletprogramspaymentsadsmessages
  • providerenum

    With onboarding: the platform its connections step lists first.

    metatiktokgooglesnapchatshopifyinstagram
  • emailstring

    Prefill; defaults to the account's contact details.

  • phonestring
  • returnUrlstring

    Where the hosted page sends the person when they finish.

  • appearanceobject
    Show 3 child fields
    • themeenum
      lightdarkauto
    • colorsobject
      Show 1 child field
      • primarystring· required
    • radiusinteger

      Corner radius in px.

Response2019 fieldsShow
  • idemb_…
  • accountstring

    The brand (acct_…) or creator (crtr_…) it shows.

  • componentsenum[]
    onboardingcreator_programswalletprogramspaymentsadsmessages
  • statusenum

    expired once expiresAt passes, or when you end it with PATCH.

    activeexpired
  • expiresAtstring

    When url and any mounted components stop working.

  • createdAtstring
  • urlstring

    The hosted page; send the person here. Lasts 24 hours.

  • clientSecretstring

    Pass to @lucra/sdk/embed in your frontend. Single use, from an allowed origin.

  • clientSecretExpiresAtstring

    Mount the components before this; about 10 minutes.

GET/v1/embeds
As creatorread

List the embeds you opened for a brand or creator

const { data } = await lucra.embeds.list()

Query parameters

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 6 fields each, and nextCursorShow
  • idemb_…
  • accountstring

    The brand (acct_…) or creator (crtr_…) it shows.

  • componentsenum[]
    onboardingcreator_programswalletprogramspaymentsadsmessages
  • statusenum

    expired once expiresAt passes, or when you end it with PATCH.

    activeexpired
  • expiresAtstring

    When url and any mounted components stop working.

  • createdAtstring
GET/v1/embeds/:id
As creatorread

Get an embed

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

Path parameters

  • idemb_…· required
Response2006 fieldsShow
  • idemb_…
  • accountstring

    The brand (acct_…) or creator (crtr_…) it shows.

  • componentsenum[]
    onboardingcreator_programswalletprogramspaymentsadsmessages
  • statusenum

    expired once expiresAt passes, or when you end it with PATCH.

    activeexpired
  • expiresAtstring

    When url and any mounted components stop working.

  • createdAtstring
PATCH/v1/embeds/:id
As creatorwrite

End an embed early

const { data } = await lucra.embeds.update({
  path: { id: "emb_…" },
  body: { status: "expired" },
})

Path parameters

  • idemb_…· required

Body

  • statusstring· required

    Ends it now: the hosted url and mounted components stop working.

    expired
Response2006 fieldsShow
  • idemb_…
  • accountstring

    The brand (acct_…) or creator (crtr_…) it shows.

  • componentsenum[]
    onboardingcreator_programswalletprogramspaymentsadsmessages
  • statusenum

    expired once expiresAt passes, or when you end it with PATCH.

    activeexpired
  • expiresAtstring

    When url and any mounted components stop working.

  • createdAtstring

Products

GET/v1/products
As creatorread

List products; as a creator, the ones attached to the programs you're approved in, which you can ask a sample of

const { data } = await lucra.products.list()

Query parameters

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 20 fields each, and nextCursorShow
  • idprod_…
  • accountacct_…

    The brand whose catalog it's in.

  • brandNamestring
  • namestring
  • vendorstringnullable
  • productTypestringnullable
  • descriptionstringnullable
  • skustringnullable
  • statusstringnullable

    active or archived; Shopify products can also be draft or unlisted.

  • urlstringnullable
  • imageUrlstringnullable
  • imagefile_…nullable
  • sampleEligibleboolean
  • accessCodestringnullable

    A masked summary of the code creators get instead of an order.

  • variantsobject[]
    Show 6 child fields
    • idstring

      The variant's ID in its store, as samples take it.

    • titlestring
    • optionstringnullable
    • priceintegernullable
    • skustringnullable
    • imageUrlstringnullable
  • currencystringnullable

    The currency of variant prices; null for manual products.

  • externalobjectnullable

    The store the product syncs from; null for products added in Lucra.

    Show 3 child fields
    • providerstring
      shopify
    • idstring
    • urlstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
POST/v1/products
write

Add a product to the catalog

const { data } = await lucra.products.create({
  body: { name: "…" },
})

Body

  • namestring· required
  • productTypestring
  • urlstring
  • descriptionstring
  • skustring
  • imagefile_…
  • sampleEligibleboolean
  • accessCodestring
  • statusenum
    activearchived
Response20120 fieldsShow
  • idprod_…
  • accountacct_…

    The brand whose catalog it's in.

  • brandNamestring
  • namestring
  • vendorstringnullable
  • productTypestringnullable
  • descriptionstringnullable
  • skustringnullable
  • statusstringnullable

    active or archived; Shopify products can also be draft or unlisted.

  • urlstringnullable
  • imageUrlstringnullable
  • imagefile_…nullable
  • sampleEligibleboolean
  • accessCodestringnullable

    A masked summary of the code creators get instead of an order.

  • variantsobject[]
    Show 6 child fields
    • idstring

      The variant's ID in its store, as samples take it.

    • titlestring
    • optionstringnullable
    • priceintegernullable
    • skustringnullable
    • imageUrlstringnullable
  • currencystringnullable

    The currency of variant prices; null for manual products.

  • externalobjectnullable

    The store the product syncs from; null for products added in Lucra.

    Show 3 child fields
    • providerstring
      shopify
    • idstring
    • urlstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
GET/v1/products/:id
As creatorread

Get a product

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

Path parameters

  • idprod_…· required
Response20020 fieldsShow
  • idprod_…
  • accountacct_…

    The brand whose catalog it's in.

  • brandNamestring
  • namestring
  • vendorstringnullable
  • productTypestringnullable
  • descriptionstringnullable
  • skustringnullable
  • statusstringnullable

    active or archived; Shopify products can also be draft or unlisted.

  • urlstringnullable
  • imageUrlstringnullable
  • imagefile_…nullable
  • sampleEligibleboolean
  • accessCodestringnullable

    A masked summary of the code creators get instead of an order.

  • variantsobject[]
    Show 6 child fields
    • idstring

      The variant's ID in its store, as samples take it.

    • titlestring
    • optionstringnullable
    • priceintegernullable
    • skustringnullable
    • imageUrlstringnullable
  • currencystringnullable

    The currency of variant prices; null for manual products.

  • externalobjectnullable

    The store the product syncs from; null for products added in Lucra.

    Show 3 child fields
    • providerstring
      shopify
    • idstring
    • urlstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
PATCH/v1/products/:id
write

Edit, archive or set the access code of a product

const { data } = await lucra.products.update({
  path: { id: "prod_…" },
  body: { version: 1000 },
})

Path parameters

  • idprod_…· required

Body

  • versioninteger
  • namestring
  • productTypestring
  • urlstringnullable
  • descriptionstringnullable
  • skustringnullable
  • imagefile_…nullable
  • sampleEligibleboolean
  • accessCodestringnullable
  • statusenum
    activearchived
Response20020 fieldsShow
  • idprod_…
  • accountacct_…

    The brand whose catalog it's in.

  • brandNamestring
  • namestring
  • vendorstringnullable
  • productTypestringnullable
  • descriptionstringnullable
  • skustringnullable
  • statusstringnullable

    active or archived; Shopify products can also be draft or unlisted.

  • urlstringnullable
  • imageUrlstringnullable
  • imagefile_…nullable
  • sampleEligibleboolean
  • accessCodestringnullable

    A masked summary of the code creators get instead of an order.

  • variantsobject[]
    Show 6 child fields
    • idstring

      The variant's ID in its store, as samples take it.

    • titlestring
    • optionstringnullable
    • priceintegernullable
    • skustringnullable
    • imageUrlstringnullable
  • currencystringnullable

    The currency of variant prices; null for manual products.

  • externalobjectnullable

    The store the product syncs from; null for products added in Lucra.

    Show 3 child fields
    • providerstring
      shopify
    • idstring
    • urlstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring

Retainers

GET/v1/retainers
As creatorread

List retainers

const { data } = await lucra.retainers.list({
  query: { creator: "crtr_…" },
})

Query parameters

  • creatorcrtr_…

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 21 fields each, and nextCursorShow
  • idret_…
  • creatorcrtr_…
  • accountacct_…

    The brand that offers the retainer.

  • brandNamestring
  • brandAvatarUrlstringnullable
  • kindenum

    smart_retainer pays whichever is more each period: the guarantee (pay.base) or the creator's program earnings from this account, up to pay.cap.

    retainersmart_retainer
  • deliverableCountnumbernullable

    Approved deliverables expected each period.

  • payobject
    Show 5 child fields
    • rulesobject[]
    • baseinteger

      Guaranteed each period, in cents.

    • capintegernullable

      The most one creator is paid per period, in cents; null or left out for no cap.

    • scheduleobject
    • approvalenum

      automatic pays each period on its own; manual waits for the brand to approve the calculated amount.

      automaticmanual
  • summarystring
  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • statusenum
    draftofferedacceptedactivecancelingendedrejected
  • billingStatusstring
  • currentPeriodEndAtstringnullable
  • deliverablesstringnullable
  • notesstringnullable
  • documentsany[]

    The agreements accepting accepts; accepted once the creator accepted that version with this brand.

  • offeredAtstring
  • acceptedAtstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
GET/v1/retainers/:id
As creatorread

Get a retainer

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

Path parameters

  • idret_…· required
Response20021 fieldsShow
  • idret_…
  • creatorcrtr_…
  • accountacct_…

    The brand that offers the retainer.

  • brandNamestring
  • brandAvatarUrlstringnullable
  • kindenum

    smart_retainer pays whichever is more each period: the guarantee (pay.base) or the creator's program earnings from this account, up to pay.cap.

    retainersmart_retainer
  • deliverableCountnumbernullable

    Approved deliverables expected each period.

  • payobject
    Show 5 child fields
    • rulesobject[]
    • baseinteger

      Guaranteed each period, in cents.

    • capintegernullable

      The most one creator is paid per period, in cents; null or left out for no cap.

    • scheduleobject
    • approvalenum

      automatic pays each period on its own; manual waits for the brand to approve the calculated amount.

      automaticmanual
  • summarystring
  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • statusenum
    draftofferedacceptedactivecancelingendedrejected
  • billingStatusstring
  • currentPeriodEndAtstringnullable
  • deliverablesstringnullable
  • notesstringnullable
  • documentsany[]

    The agreements accepting accepts; accepted once the creator accepted that version with this brand.

  • offeredAtstring
  • acceptedAtstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
POST/v1/retainers
write

Offer a creator a retainer

const { data } = await lucra.retainers.create({
  body: { creator: "crtr_…", pay: {} },
})

Headers

  • Idempotency-Keystring· required

    Unique to this write; resend it to retry safely.

Body

  • creatorcrtr_…· required
  • payobject· required
    Show 5 child fields
    • rulesobject[]
    • baseinteger

      Guaranteed each period, in cents.

    • capintegernullable

      The most one creator is paid per period, in cents; null or left out for no cap.

    • scheduleobject· required
    • approvalenum

      automatic pays each period on its own; manual waits for the brand to approve the calculated amount.

      automaticmanual
  • kindenum

    smart_retainer pays whichever is more each period: pay.base (the guarantee) or the creator's program earnings from this account, up to pay.cap; it has no rules.

    retainersmart_retainer
  • deliverableCountinteger

    Approved deliverables expected each period.

  • deliverablesstring
  • notesstring
Response20121 fieldsShow
  • idret_…
  • creatorcrtr_…
  • accountacct_…

    The brand that offers the retainer.

  • brandNamestring
  • brandAvatarUrlstringnullable
  • kindenum

    smart_retainer pays whichever is more each period: the guarantee (pay.base) or the creator's program earnings from this account, up to pay.cap.

    retainersmart_retainer
  • deliverableCountnumbernullable

    Approved deliverables expected each period.

  • payobject
    Show 5 child fields
    • rulesobject[]
    • baseinteger

      Guaranteed each period, in cents.

    • capintegernullable

      The most one creator is paid per period, in cents; null or left out for no cap.

    • scheduleobject
    • approvalenum

      automatic pays each period on its own; manual waits for the brand to approve the calculated amount.

      automaticmanual
  • summarystring
  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • statusenum
    draftofferedacceptedactivecancelingendedrejected
  • billingStatusstring
  • currentPeriodEndAtstringnullable
  • deliverablesstringnullable
  • notesstringnullable
  • documentsany[]

    The agreements accepting accepts; accepted once the creator accepted that version with this brand.

  • offeredAtstring
  • acceptedAtstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
PATCH/v1/retainers/:id
As creatorwrite

Cancel a retainer, or, as the creator, accept or reject an offer or cancel

const { data } = await lucra.retainers.update({
  path: { id: "ret_…" },
  body: { status: "accepted" },
})

Path parameters

  • idret_…· required

Body

  • statusenum· required
    acceptedrejectedcanceling
  • versioninteger
Response20021 fieldsShow
  • idret_…
  • creatorcrtr_…
  • accountacct_…

    The brand that offers the retainer.

  • brandNamestring
  • brandAvatarUrlstringnullable
  • kindenum

    smart_retainer pays whichever is more each period: the guarantee (pay.base) or the creator's program earnings from this account, up to pay.cap.

    retainersmart_retainer
  • deliverableCountnumbernullable

    Approved deliverables expected each period.

  • payobject
    Show 5 child fields
    • rulesobject[]
    • baseinteger

      Guaranteed each period, in cents.

    • capintegernullable

      The most one creator is paid per period, in cents; null or left out for no cap.

    • scheduleobject
    • approvalenum

      automatic pays each period on its own; manual waits for the brand to approve the calculated amount.

      automaticmanual
  • summarystring
  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • statusenum
    draftofferedacceptedactivecancelingendedrejected
  • billingStatusstring
  • currentPeriodEndAtstringnullable
  • deliverablesstringnullable
  • notesstringnullable
  • documentsany[]

    The agreements accepting accepts; accepted once the creator accepted that version with this brand.

  • offeredAtstring
  • acceptedAtstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring

Programs

GET/v1/programs
As creatorread

List programs: your own (archived ones only with status=archived), or with scope=network the open programs on the Lucra Network

const { data } = await lucra.programs.list({
  query: { scope: "network" },
})

Query parameters

  • scopestring

    The Lucra Network's open programs instead of your own.

    network
  • visibilityenum
    invitenetwork
  • statusenum
    draftopenpausedclosedarchived

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 37 fields each, and nextCursorShow
  • idprog_…
  • accountacct_…

    The brand that runs the program.

  • brandNamestring

    The brand's display name. Network programs are seen by creators who can't read the brand's account.

  • brandAvatarUrlstringnullable

    A short-lived link to the brand's picture.

  • joinedCreatorCountinteger

    Creators approved to the program.

  • joinedCreatorsobject[]

    A preview of up to four live, joined creators. Only public profile names and pictures.

    Show 4 child fields
    • idcrtr_…
    • namestring
    • initialsstring
    • avatarUrlstringnullable
  • namestring
  • typeenum
    organicpaid_ads
  • statusenum
    draftopenpausedclosedarchived
  • visibilityenum

    invite: creators the brand invites; network: any creator can find it and apply.

    invitenetwork
  • briefstringnullable

    What creators read before applying.

  • platformsenum[]
    instagramtiktok
  • paidSocialPlatformsenum[]
    instagramtiktok
  • allowManualOrganicUploadboolean
  • allowPaidPromotionboolean
  • allowPaidSocialUploadsboolean
  • requireAdAuthorizationboolean

    Creators grant an ad authorization (a Meta partnership; on TikTok, their account approved to your Business Center) before their work runs as a creator-identity ad.

  • submissionLimitsobject
    Show 4 child fields
    • modeenum
      limitedunlimited
    • maxnumber
    • concurrentModeenum
      limitedunlimited
    • concurrentMaxnumber
  • payobject

    What creators earn. A creator reading the program sees their own pay, with any terms the brand set for them.

    Show 5 child fields
    • rulesobject[]
    • baseinteger

      Guaranteed each period, in cents.

    • capintegernullable

      The most one creator is paid per period, in cents; null or left out for no cap.

    • scheduleobject
    • approvalenum

      automatic pays each period on its own; manual waits for the brand to approve the calculated amount.

      automaticmanual
  • paySummarystring

    The pay in plain English, ready to show.

  • payVersioninteger

    The pay's version, bumped by each pay edit. Admitted creators move to it on their next action in the program; each application shows the version it's on.

  • payIssuesobject[]

    Ways the program's pay can't be paid as set, for the brand to fix; it keeps paying as it does until then. Empty when there are none, and on programs seen on the network.

    Show 3 child fields
    • codeenum
      pay_invalid_valuepay_cap_zeropay_cap_below_amountpay_cap_requiredpay_base_needs_periodpay_schedule_mismatchpay_duplicate_rulepay_scope_invalidpay_exceeds_budgetpay_primary_missingpay_primary_changedpay_program_unsupported
    • pathstring
    • messagestring
  • promotedobject
    Show 4 child fields
    • typeenumnullable
      appofferotherproductsite
    • namestringnullable
    • urlstringnullable
    • productsprod_…[]

      Catalog products, first one primary.

  • briefFilesobject[]
    Show 6 child fields
    • filefile_…
    • fileNamestring
    • contentTypestring
    • sizenumber
    • urlstringnullable
    • previewobjectnullable
      Show 3 child fields
      • urlstring
      • contentTypestringnullable
      • sizenumbernullable
  • referenceVideosobject[]
    Show 7 child fields
    • filefile_…
    • fileNamestring
    • contentTypestring
    • sizenumber
    • urlstringnullable
    • widthnumbernullable
    • heightnumbernullable
  • agreementsany[]

    The agreements applying accepts: each one's current version.

  • submissionAgreementsany[]

    The agreements submitting work to the program accepts.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • budgetobjectnullable

    The brand's own numbers; null on programs seen on the network.

    Show 1 child field
    • amountnumbernullable

      The planned budget.

  • adSpendobjectnullable
    Show 2 child fields
    • totalnumber
    • byPlatformobject[]
      Show 2 child fields
      • platformstring
      • amountnumber
  • partnerApprovalobjectnullable
    Show 3 child fields
    • statusenum
      draftpendingapprovedrejectedchanges_requestedlaunched
    • notestringnullable
    • requestedAtstringnullable
  • createdByPartneracct_…nullable
  • startsAtstringnullable
  • endsAtstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
GET/v1/programs/:id
As creatorread

Get a program

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

Path parameters

  • idprog_…· required
Response20037 fieldsShow
  • idprog_…
  • accountacct_…

    The brand that runs the program.

  • brandNamestring

    The brand's display name. Network programs are seen by creators who can't read the brand's account.

  • brandAvatarUrlstringnullable

    A short-lived link to the brand's picture.

  • joinedCreatorCountinteger

    Creators approved to the program.

  • joinedCreatorsobject[]

    A preview of up to four live, joined creators. Only public profile names and pictures.

    Show 4 child fields
    • idcrtr_…
    • namestring
    • initialsstring
    • avatarUrlstringnullable
  • namestring
  • typeenum
    organicpaid_ads
  • statusenum
    draftopenpausedclosedarchived
  • visibilityenum

    invite: creators the brand invites; network: any creator can find it and apply.

    invitenetwork
  • briefstringnullable

    What creators read before applying.

  • platformsenum[]
    instagramtiktok
  • paidSocialPlatformsenum[]
    instagramtiktok
  • allowManualOrganicUploadboolean
  • allowPaidPromotionboolean
  • allowPaidSocialUploadsboolean
  • requireAdAuthorizationboolean

    Creators grant an ad authorization (a Meta partnership; on TikTok, their account approved to your Business Center) before their work runs as a creator-identity ad.

  • submissionLimitsobject
    Show 4 child fields
    • modeenum
      limitedunlimited
    • maxnumber
    • concurrentModeenum
      limitedunlimited
    • concurrentMaxnumber
  • payobject

    What creators earn. A creator reading the program sees their own pay, with any terms the brand set for them.

    Show 5 child fields
    • rulesobject[]
    • baseinteger

      Guaranteed each period, in cents.

    • capintegernullable

      The most one creator is paid per period, in cents; null or left out for no cap.

    • scheduleobject
    • approvalenum

      automatic pays each period on its own; manual waits for the brand to approve the calculated amount.

      automaticmanual
  • paySummarystring

    The pay in plain English, ready to show.

  • payVersioninteger

    The pay's version, bumped by each pay edit. Admitted creators move to it on their next action in the program; each application shows the version it's on.

  • payIssuesobject[]

    Ways the program's pay can't be paid as set, for the brand to fix; it keeps paying as it does until then. Empty when there are none, and on programs seen on the network.

    Show 3 child fields
    • codeenum
      pay_invalid_valuepay_cap_zeropay_cap_below_amountpay_cap_requiredpay_base_needs_periodpay_schedule_mismatchpay_duplicate_rulepay_scope_invalidpay_exceeds_budgetpay_primary_missingpay_primary_changedpay_program_unsupported
    • pathstring
    • messagestring
  • promotedobject
    Show 4 child fields
    • typeenumnullable
      appofferotherproductsite
    • namestringnullable
    • urlstringnullable
    • productsprod_…[]

      Catalog products, first one primary.

  • briefFilesobject[]
    Show 6 child fields
    • filefile_…
    • fileNamestring
    • contentTypestring
    • sizenumber
    • urlstringnullable
    • previewobjectnullable
      Show 3 child fields
      • urlstring
      • contentTypestringnullable
      • sizenumbernullable
  • referenceVideosobject[]
    Show 7 child fields
    • filefile_…
    • fileNamestring
    • contentTypestring
    • sizenumber
    • urlstringnullable
    • widthnumbernullable
    • heightnumbernullable
  • agreementsany[]

    The agreements applying accepts: each one's current version.

  • submissionAgreementsany[]

    The agreements submitting work to the program accepts.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • budgetobjectnullable

    The brand's own numbers; null on programs seen on the network.

    Show 1 child field
    • amountnumbernullable

      The planned budget.

  • adSpendobjectnullable
    Show 2 child fields
    • totalnumber
    • byPlatformobject[]
      Show 2 child fields
      • platformstring
      • amountnumber
  • partnerApprovalobjectnullable
    Show 3 child fields
    • statusenum
      draftpendingapprovedrejectedchanges_requestedlaunched
    • notestringnullable
    • requestedAtstringnullable
  • createdByPartneracct_…nullable
  • startsAtstringnullable
  • endsAtstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
POST/v1/programs
write

Create a program

const { data } = await lucra.programs.create({
  body: { name: "…", type: "organic", visibility: "invite" },
})

Body

  • namestring· required
  • typeenum· required
    organicpaid_ads
  • visibilityenum· required
    invitenetwork
  • briefstring
  • platformsenum[]
    instagramtiktok
  • paidSocialPlatformsenum[]
    instagramtiktok
  • allowManualOrganicUploadboolean
  • allowPaidPromotionboolean
  • allowPaidSocialUploadsboolean
  • requireAdAuthorizationboolean
  • submissionLimitsobject
    Show 4 child fields
    • modeenum
      limitedunlimited
    • maxinteger
    • concurrentModeenum
      limitedunlimited
    • concurrentMaxinteger
  • payobject· required
    Show 5 child fields
    • rulesobject[]
    • baseinteger

      Guaranteed each period, in cents.

    • capintegernullable

      The most one creator is paid per period, in cents; null or left out for no cap.

    • scheduleobject· required
    • approvalenum

      automatic pays each period on its own; manual waits for the brand to approve the calculated amount.

      automaticmanual
  • promotedobject
    Show 4 child fields
    • typeenum
      appofferotherproductsite
    • namestring
    • urlstring
    • productsprod_…[]
  • budgetobject
    Show 1 child field
    • amountinteger
  • briefFilesfile_…[]
  • referenceVideosfile_…[]
  • agreementsagr_…[]
Response20137 fieldsShow
  • idprog_…
  • accountacct_…

    The brand that runs the program.

  • brandNamestring

    The brand's display name. Network programs are seen by creators who can't read the brand's account.

  • brandAvatarUrlstringnullable

    A short-lived link to the brand's picture.

  • joinedCreatorCountinteger

    Creators approved to the program.

  • joinedCreatorsobject[]

    A preview of up to four live, joined creators. Only public profile names and pictures.

    Show 4 child fields
    • idcrtr_…
    • namestring
    • initialsstring
    • avatarUrlstringnullable
  • namestring
  • typeenum
    organicpaid_ads
  • statusenum
    draftopenpausedclosedarchived
  • visibilityenum

    invite: creators the brand invites; network: any creator can find it and apply.

    invitenetwork
  • briefstringnullable

    What creators read before applying.

  • platformsenum[]
    instagramtiktok
  • paidSocialPlatformsenum[]
    instagramtiktok
  • allowManualOrganicUploadboolean
  • allowPaidPromotionboolean
  • allowPaidSocialUploadsboolean
  • requireAdAuthorizationboolean

    Creators grant an ad authorization (a Meta partnership; on TikTok, their account approved to your Business Center) before their work runs as a creator-identity ad.

  • submissionLimitsobject
    Show 4 child fields
    • modeenum
      limitedunlimited
    • maxnumber
    • concurrentModeenum
      limitedunlimited
    • concurrentMaxnumber
  • payobject

    What creators earn. A creator reading the program sees their own pay, with any terms the brand set for them.

    Show 5 child fields
    • rulesobject[]
    • baseinteger

      Guaranteed each period, in cents.

    • capintegernullable

      The most one creator is paid per period, in cents; null or left out for no cap.

    • scheduleobject
    • approvalenum

      automatic pays each period on its own; manual waits for the brand to approve the calculated amount.

      automaticmanual
  • paySummarystring

    The pay in plain English, ready to show.

  • payVersioninteger

    The pay's version, bumped by each pay edit. Admitted creators move to it on their next action in the program; each application shows the version it's on.

  • payIssuesobject[]

    Ways the program's pay can't be paid as set, for the brand to fix; it keeps paying as it does until then. Empty when there are none, and on programs seen on the network.

    Show 3 child fields
    • codeenum
      pay_invalid_valuepay_cap_zeropay_cap_below_amountpay_cap_requiredpay_base_needs_periodpay_schedule_mismatchpay_duplicate_rulepay_scope_invalidpay_exceeds_budgetpay_primary_missingpay_primary_changedpay_program_unsupported
    • pathstring
    • messagestring
  • promotedobject
    Show 4 child fields
    • typeenumnullable
      appofferotherproductsite
    • namestringnullable
    • urlstringnullable
    • productsprod_…[]

      Catalog products, first one primary.

  • briefFilesobject[]
    Show 6 child fields
    • filefile_…
    • fileNamestring
    • contentTypestring
    • sizenumber
    • urlstringnullable
    • previewobjectnullable
      Show 3 child fields
      • urlstring
      • contentTypestringnullable
      • sizenumbernullable
  • referenceVideosobject[]
    Show 7 child fields
    • filefile_…
    • fileNamestring
    • contentTypestring
    • sizenumber
    • urlstringnullable
    • widthnumbernullable
    • heightnumbernullable
  • agreementsany[]

    The agreements applying accepts: each one's current version.

  • submissionAgreementsany[]

    The agreements submitting work to the program accepts.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • budgetobjectnullable

    The brand's own numbers; null on programs seen on the network.

    Show 1 child field
    • amountnumbernullable

      The planned budget.

  • adSpendobjectnullable
    Show 2 child fields
    • totalnumber
    • byPlatformobject[]
      Show 2 child fields
      • platformstring
      • amountnumber
  • partnerApprovalobjectnullable
    Show 3 child fields
    • statusenum
      draftpendingapprovedrejectedchanges_requestedlaunched
    • notestringnullable
    • requestedAtstringnullable
  • createdByPartneracct_…nullable
  • startsAtstringnullable
  • endsAtstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
PATCH/v1/programs/:id
write

Update a program; every change in one request applies together, or none does

const { data } = await lucra.programs.update({
  path: { id: "prog_…" },
  body: { name: "…" },
})

Path parameters

  • idprog_…· required

Body

  • namestring
  • briefstring
  • statusenum
    draftopenpausedarchived
  • visibilityenum
    invitenetwork
  • submissionLimitsobject
    Show 4 child fields
    • modeenum
      limitedunlimited
    • maxinteger
    • concurrentModeenum
      limitedunlimited
    • concurrentMaxinteger
  • promotedobject

    Replaces the promoted catalog products, first one primary.

    Show 1 child field
    • productsprod_…[]· required
  • briefFilesfile_…[]
  • referenceVideosfile_…[]
  • agreementsagr_…[]
  • payobject
    Show 5 child fields
    • rulesobject[]
    • baseinteger

      Guaranteed each period, in cents.

    • capintegernullable

      The most one creator is paid per period, in cents; null or left out for no cap.

    • scheduleobject· required
    • approvalenum

      automatic pays each period on its own; manual waits for the brand to approve the calculated amount.

      automaticmanual
  • budgetobject
    Show 1 child field
    • amountinteger
  • versioninteger
Response20037 fieldsShow
  • idprog_…
  • accountacct_…

    The brand that runs the program.

  • brandNamestring

    The brand's display name. Network programs are seen by creators who can't read the brand's account.

  • brandAvatarUrlstringnullable

    A short-lived link to the brand's picture.

  • joinedCreatorCountinteger

    Creators approved to the program.

  • joinedCreatorsobject[]

    A preview of up to four live, joined creators. Only public profile names and pictures.

    Show 4 child fields
    • idcrtr_…
    • namestring
    • initialsstring
    • avatarUrlstringnullable
  • namestring
  • typeenum
    organicpaid_ads
  • statusenum
    draftopenpausedclosedarchived
  • visibilityenum

    invite: creators the brand invites; network: any creator can find it and apply.

    invitenetwork
  • briefstringnullable

    What creators read before applying.

  • platformsenum[]
    instagramtiktok
  • paidSocialPlatformsenum[]
    instagramtiktok
  • allowManualOrganicUploadboolean
  • allowPaidPromotionboolean
  • allowPaidSocialUploadsboolean
  • requireAdAuthorizationboolean

    Creators grant an ad authorization (a Meta partnership; on TikTok, their account approved to your Business Center) before their work runs as a creator-identity ad.

  • submissionLimitsobject
    Show 4 child fields
    • modeenum
      limitedunlimited
    • maxnumber
    • concurrentModeenum
      limitedunlimited
    • concurrentMaxnumber
  • payobject

    What creators earn. A creator reading the program sees their own pay, with any terms the brand set for them.

    Show 5 child fields
    • rulesobject[]
    • baseinteger

      Guaranteed each period, in cents.

    • capintegernullable

      The most one creator is paid per period, in cents; null or left out for no cap.

    • scheduleobject
    • approvalenum

      automatic pays each period on its own; manual waits for the brand to approve the calculated amount.

      automaticmanual
  • paySummarystring

    The pay in plain English, ready to show.

  • payVersioninteger

    The pay's version, bumped by each pay edit. Admitted creators move to it on their next action in the program; each application shows the version it's on.

  • payIssuesobject[]

    Ways the program's pay can't be paid as set, for the brand to fix; it keeps paying as it does until then. Empty when there are none, and on programs seen on the network.

    Show 3 child fields
    • codeenum
      pay_invalid_valuepay_cap_zeropay_cap_below_amountpay_cap_requiredpay_base_needs_periodpay_schedule_mismatchpay_duplicate_rulepay_scope_invalidpay_exceeds_budgetpay_primary_missingpay_primary_changedpay_program_unsupported
    • pathstring
    • messagestring
  • promotedobject
    Show 4 child fields
    • typeenumnullable
      appofferotherproductsite
    • namestringnullable
    • urlstringnullable
    • productsprod_…[]

      Catalog products, first one primary.

  • briefFilesobject[]
    Show 6 child fields
    • filefile_…
    • fileNamestring
    • contentTypestring
    • sizenumber
    • urlstringnullable
    • previewobjectnullable
      Show 3 child fields
      • urlstring
      • contentTypestringnullable
      • sizenumbernullable
  • referenceVideosobject[]
    Show 7 child fields
    • filefile_…
    • fileNamestring
    • contentTypestring
    • sizenumber
    • urlstringnullable
    • widthnumbernullable
    • heightnumbernullable
  • agreementsany[]

    The agreements applying accepts: each one's current version.

  • submissionAgreementsany[]

    The agreements submitting work to the program accepts.

  • currencystring

    Lowercase ISO 4217 code, e.g. usd.

  • budgetobjectnullable

    The brand's own numbers; null on programs seen on the network.

    Show 1 child field
    • amountnumbernullable

      The planned budget.

  • adSpendobjectnullable
    Show 2 child fields
    • totalnumber
    • byPlatformobject[]
      Show 2 child fields
      • platformstring
      • amountnumber
  • partnerApprovalobjectnullable
    Show 3 child fields
    • statusenum
      draftpendingapprovedrejectedchanges_requestedlaunched
    • notestringnullable
    • requestedAtstringnullable
  • createdByPartneracct_…nullable
  • startsAtstringnullable
  • endsAtstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring

Samples

GET/v1/samples
As creatorread

List samples

const { data } = await lucra.samples.list({
  query: { product: "prod_…" },
})

Query parameters

  • productprod_…
  • creatorcrtr_…
  • statusstring

    One or more, comma-separated: requested, approved, rejected, shipping, shipped, failed.

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 13 fields each, and nextCursorShow
  • idsmpl_…
  • creatorcrtr_…nullable
  • productprod_…nullable
  • productNamestring

    The product's name when the sample was made, so it reads even if the product isn't one you can see.

  • variantobjectnullable
    Show 2 child fields
    • idstringnullable

      The store's variant ID; null for products added in Lucra.

    • titlestring
  • statusenum

    requested, then approved or rejected by the brand; shipping once an order or access code is being made, then shipped, or failed.

    requestedapprovedrejectedshippingshippedfailed
  • programprog_…nullable
  • notestringnullable

    The creator's note with a request.

  • decidedAtstringnullable
  • shipmentobjectnullable

    The order or access code that went out.

    Show 8 child fields
    • statusenum

      The store's own progress: pending, invoice_pending, order_created, access_code_ready or failed.

      pendinginvoice_pendingorder_createdaccess_code_readyfailed
    • methodenum
      orderaccess_code
    • quantitynumber
    • fulfillmentStatusstringnullable
    • accessCodestringnullable

      Masked, unless the creator reads the sample with expand=accessCode.

    • errorstringnullable
    • orderobjectnullable
      Show 4 child fields
      • idstringnullable
      • namestringnullable
      • draftIdstringnullable
      • shopDomainstring
    • trackingobjectnullable
      Show 3 child fields
      • companystringnullable
      • numberstring
      • urlstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
POST/v1/samples
As creatorwrite

Request a sample as a creator, or send one to a creator as the brand

const { data } = await lucra.samples.create({
  body: { },
})
Response20113 fieldsShow
  • idsmpl_…
  • creatorcrtr_…nullable
  • productprod_…nullable
  • productNamestring

    The product's name when the sample was made, so it reads even if the product isn't one you can see.

  • variantobjectnullable
    Show 2 child fields
    • idstringnullable

      The store's variant ID; null for products added in Lucra.

    • titlestring
  • statusenum

    requested, then approved or rejected by the brand; shipping once an order or access code is being made, then shipped, or failed.

    requestedapprovedrejectedshippingshippedfailed
  • programprog_…nullable
  • notestringnullable

    The creator's note with a request.

  • decidedAtstringnullable
  • shipmentobjectnullable

    The order or access code that went out.

    Show 8 child fields
    • statusenum

      The store's own progress: pending, invoice_pending, order_created, access_code_ready or failed.

      pendinginvoice_pendingorder_createdaccess_code_readyfailed
    • methodenum
      orderaccess_code
    • quantitynumber
    • fulfillmentStatusstringnullable
    • accessCodestringnullable

      Masked, unless the creator reads the sample with expand=accessCode.

    • errorstringnullable
    • orderobjectnullable
      Show 4 child fields
      • idstringnullable
      • namestringnullable
      • draftIdstringnullable
      • shopDomainstring
    • trackingobjectnullable
      Show 3 child fields
      • companystringnullable
      • numberstring
      • urlstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
GET/v1/samples/:id
As creatorread

Get a sample; its creator can reveal an access code with expand=accessCode

const { data } = await lucra.samples.retrieve({
  path: { id: "smpl_…" },
  query: { expand: "accessCode" },
})

Path parameters

  • idsmpl_…· required

Query parameters

  • expandstring

    As the creator: shipment.accessCode whole instead of masked. Each reveal is logged.

    accessCode
Response20013 fieldsShow
  • idsmpl_…
  • creatorcrtr_…nullable
  • productprod_…nullable
  • productNamestring

    The product's name when the sample was made, so it reads even if the product isn't one you can see.

  • variantobjectnullable
    Show 2 child fields
    • idstringnullable

      The store's variant ID; null for products added in Lucra.

    • titlestring
  • statusenum

    requested, then approved or rejected by the brand; shipping once an order or access code is being made, then shipped, or failed.

    requestedapprovedrejectedshippingshippedfailed
  • programprog_…nullable
  • notestringnullable

    The creator's note with a request.

  • decidedAtstringnullable
  • shipmentobjectnullable

    The order or access code that went out.

    Show 8 child fields
    • statusenum

      The store's own progress: pending, invoice_pending, order_created, access_code_ready or failed.

      pendinginvoice_pendingorder_createdaccess_code_readyfailed
    • methodenum
      orderaccess_code
    • quantitynumber
    • fulfillmentStatusstringnullable
    • accessCodestringnullable

      Masked, unless the creator reads the sample with expand=accessCode.

    • errorstringnullable
    • orderobjectnullable
      Show 4 child fields
      • idstringnullable
      • namestringnullable
      • draftIdstringnullable
      • shopDomainstring
    • trackingobjectnullable
      Show 3 child fields
      • companystringnullable
      • numberstring
      • urlstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
PATCH/v1/samples/:id
write

Approve or reject a sample request

const { data } = await lucra.samples.update({
  path: { id: "smpl_…" },
  body: { status: "approved" },
})

Path parameters

  • idsmpl_…· required

Body

  • statusenum· required
    approvedrejected
  • versioninteger
Response20013 fieldsShow
  • idsmpl_…
  • creatorcrtr_…nullable
  • productprod_…nullable
  • productNamestring

    The product's name when the sample was made, so it reads even if the product isn't one you can see.

  • variantobjectnullable
    Show 2 child fields
    • idstringnullable

      The store's variant ID; null for products added in Lucra.

    • titlestring
  • statusenum

    requested, then approved or rejected by the brand; shipping once an order or access code is being made, then shipped, or failed.

    requestedapprovedrejectedshippingshippedfailed
  • programprog_…nullable
  • notestringnullable

    The creator's note with a request.

  • decidedAtstringnullable
  • shipmentobjectnullable

    The order or access code that went out.

    Show 8 child fields
    • statusenum

      The store's own progress: pending, invoice_pending, order_created, access_code_ready or failed.

      pendinginvoice_pendingorder_createdaccess_code_readyfailed
    • methodenum
      orderaccess_code
    • quantitynumber
    • fulfillmentStatusstringnullable
    • accessCodestringnullable

      Masked, unless the creator reads the sample with expand=accessCode.

    • errorstringnullable
    • orderobjectnullable
      Show 4 child fields
      • idstringnullable
      • namestringnullable
      • draftIdstringnullable
      • shopDomainstring
    • trackingobjectnullable
      Show 3 child fields
      • companystringnullable
      • numberstring
      • urlstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring

Submissions

GET/v1/submissions
As creatorread

List submissions

const { data } = await lucra.submissions.list({
  query: { program: "prog_…" },
})

Query parameters

  • programprog_…
  • creatorcrtr_…
  • statusstring

    One or more, comma-separated: pending, revision_requested, approved, live, rejected, measuring, withdrawn, archived.

Plus paging: limit, cursor, createdAfter and createdBefore.

Response200A page of items, 19 fields each, and nextCursorShow
  • idsub_…
  • typeenum

    post: the creator's published Instagram or TikTok post; video: an uploaded video.

    videopost
  • programprog_…nullable
  • creatorcrtr_…nullable
  • revisionOfsub_…nullable
  • statusenum

    A post measures its views first (measuring), then waits for review (pending). withdrawn: by the creator; archived: kept but hidden from lists unless status=archived is asked for.

    pendingrevision_requestedapprovedliverejectedmeasuringwithdrawnarchived
  • feedbackstringnullable

    The brand's note with its latest review, such as what to change in a revision.

  • shortIdstringnullable

    The short ID shown in the app and ad names.

  • submittedAtstringnullable
  • tagsstring[]
  • mediaobjectnullable
    Show 6 child fields
    • videoUrlstringnullable
    • thumbnailUrlstringnullable
    • durationSecondsnumbernullable
    • fileNamestringnullable
    • sizenumbernullable
    • contentTypestringnullable
  • platformPostobjectnullable

    The creator's published post this submission is, for a post.

    Show 9 child fields
    • idstringnullable

      The post's ID on its platform.

    • platformenum
      instagramtiktok
    • urlstringnullable
    • captionstringnullable
    • metricsobject
      Show 5 child fields
      • viewsnumbernullable
      • likesnumbernullable
      • commentsnumbernullable
      • sharesnumbernullable
      • savesnumbernullable
    • publishedAtstringnullable
    • paidViewsnumbernullable

      Views counted toward pay once measurement ends.

    • measurementEndsAtstringnullable
    • paymentApprovedAtstringnullable
  • transcriptobjectnullable
    Show 3 child fields
    • statusenum
      completedfailedpendingskippedunsupported
    • textstringnullable
    • segmentsobject[]nullable

      The transcript as timed lines, start and end in seconds from the video's start.

      Show 3 child fields
      • startnumber
      • endnumber
      • textstring
  • adsobjectnullable
    Show 4 child fields
    • identityenumnullable
      creatorbrand
    • launchedOnstring[]
    • ownershipstringnullable
    • programTypestringnullable
  • existingPostobject

    A brand's existing TikTok post to boost (added with post): no upload, it runs as itself. Absent for an uploaded video.

    Show 4 child fields
    • connectionconn_…

      The TikTok ad connection it runs on.

    • handlestringnullable
    • readyboolean

      Authorized to the advertiser, so campaigns can run it; false while waiting on the creator's Spark code, or once it expires.

    • authorizedUntilstringnullable
  • adAuthorizationobjectnullable

    The newest ad authorization asked for it (GET /v1/ad-authorizations).

    Show 5 child fields
    • idadauth_…
    • platformenum
      metatiktok
    • statusenum
      requestedgrantedrevokedexpired
    • authorizedAtstringnullable
    • expiresAtstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
GET/v1/submissions/:id
As creatorread

Get a submission

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

Path parameters

  • idsub_…· required
Response20019 fieldsShow
  • idsub_…
  • typeenum

    post: the creator's published Instagram or TikTok post; video: an uploaded video.

    videopost
  • programprog_…nullable
  • creatorcrtr_…nullable
  • revisionOfsub_…nullable
  • statusenum

    A post measures its views first (measuring), then waits for review (pending). withdrawn: by the creator; archived: kept but hidden from lists unless status=archived is asked for.

    pendingrevision_requestedapprovedliverejectedmeasuringwithdrawnarchived
  • feedbackstringnullable

    The brand's note with its latest review, such as what to change in a revision.

  • shortIdstringnullable

    The short ID shown in the app and ad names.

  • submittedAtstringnullable
  • tagsstring[]
  • mediaobjectnullable
    Show 6 child fields
    • videoUrlstringnullable
    • thumbnailUrlstringnullable
    • durationSecondsnumbernullable
    • fileNamestringnullable
    • sizenumbernullable
    • contentTypestringnullable
  • platformPostobjectnullable

    The creator's published post this submission is, for a post.

    Show 9 child fields
    • idstringnullable

      The post's ID on its platform.

    • platformenum
      instagramtiktok
    • urlstringnullable
    • captionstringnullable
    • metricsobject
      Show 5 child fields
      • viewsnumbernullable
      • likesnumbernullable
      • commentsnumbernullable
      • sharesnumbernullable
      • savesnumbernullable
    • publishedAtstringnullable
    • paidViewsnumbernullable

      Views counted toward pay once measurement ends.

    • measurementEndsAtstringnullable
    • paymentApprovedAtstringnullable
  • transcriptobjectnullable
    Show 3 child fields
    • statusenum
      completedfailedpendingskippedunsupported
    • textstringnullable
    • segmentsobject[]nullable

      The transcript as timed lines, start and end in seconds from the video's start.

      Show 3 child fields
      • startnumber
      • endnumber
      • textstring
  • adsobjectnullable
    Show 4 child fields
    • identityenumnullable
      creatorbrand
    • launchedOnstring[]
    • ownershipstringnullable
    • programTypestringnullable
  • existingPostobject

    A brand's existing TikTok post to boost (added with post): no upload, it runs as itself. Absent for an uploaded video.

    Show 4 child fields
    • connectionconn_…

      The TikTok ad connection it runs on.

    • handlestringnullable
    • readyboolean

      Authorized to the advertiser, so campaigns can run it; false while waiting on the creator's Spark code, or once it expires.

    • authorizedUntilstringnullable
  • adAuthorizationobjectnullable

    The newest ad authorization asked for it (GET /v1/ad-authorizations).

    Show 5 child fields
    • idadauth_…
    • platformenum
      metatiktok
    • statusenum
      requestedgrantedrevokedexpired
    • authorizedAtstringnullable
    • expiresAtstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
POST/v1/submissions
As creatorwrite

Submit work as a creator, or add a brand's own video, or an existing TikTok post to boost, to its library

const { data } = await lucra.submissions.create({
  body: { program: "prog_…" },
})

Body

  • programprog_…

    The program the work is for; required for a creator.

  • filefile_…

    The uploaded video; required unless post is sent.

  • notestring
  • postobject

    As a brand: an existing TikTok post to run as a Spark Ad, by its creator's Spark code, its link, or both.

    Show 3 child fields
    • connectionconn_…· required

      The brand's TikTok ad connection that will run the post.

    • urlstring

      The post's full link, like https://www.tiktok.com/@handle/video/7234…

    • sparkCodestring

      The creator's Spark code for the post; without one, Lucra asks the creator.

  • postUrlstring

    The URL of the creator's published Instagram or TikTok post this video is; organic programs pay on its views.

  • revisionOfsub_…
  • attestationobject

    The creator's content-compliance confirmations.

    Show 4 child fields
    • disclosureIncludedboolean· required
    • experienceTruthfulboolean· required
    • noUnapprovedClaimsboolean· required
    • acceptedAgreementsobject[]

      The agreement versions the creator accepted by submitting; refused with 409 agreements_changed if the program now requires others.

      Show 2 child fields
      • agreementagr_…· required
      • versioninteger· required
  • namestring

    A brand library video's title; defaults to its file name.

Response20119 fieldsShow
  • idsub_…
  • typeenum

    post: the creator's published Instagram or TikTok post; video: an uploaded video.

    videopost
  • programprog_…nullable
  • creatorcrtr_…nullable
  • revisionOfsub_…nullable
  • statusenum

    A post measures its views first (measuring), then waits for review (pending). withdrawn: by the creator; archived: kept but hidden from lists unless status=archived is asked for.

    pendingrevision_requestedapprovedliverejectedmeasuringwithdrawnarchived
  • feedbackstringnullable

    The brand's note with its latest review, such as what to change in a revision.

  • shortIdstringnullable

    The short ID shown in the app and ad names.

  • submittedAtstringnullable
  • tagsstring[]
  • mediaobjectnullable
    Show 6 child fields
    • videoUrlstringnullable
    • thumbnailUrlstringnullable
    • durationSecondsnumbernullable
    • fileNamestringnullable
    • sizenumbernullable
    • contentTypestringnullable
  • platformPostobjectnullable

    The creator's published post this submission is, for a post.

    Show 9 child fields
    • idstringnullable

      The post's ID on its platform.

    • platformenum
      instagramtiktok
    • urlstringnullable
    • captionstringnullable
    • metricsobject
      Show 5 child fields
      • viewsnumbernullable
      • likesnumbernullable
      • commentsnumbernullable
      • sharesnumbernullable
      • savesnumbernullable
    • publishedAtstringnullable
    • paidViewsnumbernullable

      Views counted toward pay once measurement ends.

    • measurementEndsAtstringnullable
    • paymentApprovedAtstringnullable
  • transcriptobjectnullable
    Show 3 child fields
    • statusenum
      completedfailedpendingskippedunsupported
    • textstringnullable
    • segmentsobject[]nullable

      The transcript as timed lines, start and end in seconds from the video's start.

      Show 3 child fields
      • startnumber
      • endnumber
      • textstring
  • adsobjectnullable
    Show 4 child fields
    • identityenumnullable
      creatorbrand
    • launchedOnstring[]
    • ownershipstringnullable
    • programTypestringnullable
  • existingPostobject

    A brand's existing TikTok post to boost (added with post): no upload, it runs as itself. Absent for an uploaded video.

    Show 4 child fields
    • connectionconn_…

      The TikTok ad connection it runs on.

    • handlestringnullable
    • readyboolean

      Authorized to the advertiser, so campaigns can run it; false while waiting on the creator's Spark code, or once it expires.

    • authorizedUntilstringnullable
  • adAuthorizationobjectnullable

    The newest ad authorization asked for it (GET /v1/ad-authorizations).

    Show 5 child fields
    • idadauth_…
    • platformenum
      metatiktok
    • statusenum
      requestedgrantedrevokedexpired
    • authorizedAtstringnullable
    • expiresAtstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring
PATCH/v1/submissions/:id
As creatorwrite

Review, tag, file or archive a submission, or approve paying for a post; as its creator, withdraw it

const { data } = await lucra.submissions.update({
  path: { id: "sub_…" },
  body: { status: "pending" },
})

Path parameters

  • idsub_…· required

Body

  • statusenum

    A post in an organic program is approved (paid on its measured views) or rejected; archived hides a rejected or withdrawn submission from lists (it stays readable, and lists with status=archived); a creator sends withdrawn. Any member may approve, reject or request a revision (with a note); other changes need an owner or admin.

    pendingapprovedrejectedrevision_requestedwithdrawnarchived
  • notestring

    Shown to the creator with a revision request or rejection.

  • tagsstring[]
  • paymentstring

    For an approved post: approves paying the creator its finalized earnings (the brand's owner, admin or own key).

    approved
  • versioninteger
Response20019 fieldsShow
  • idsub_…
  • typeenum

    post: the creator's published Instagram or TikTok post; video: an uploaded video.

    videopost
  • programprog_…nullable
  • creatorcrtr_…nullable
  • revisionOfsub_…nullable
  • statusenum

    A post measures its views first (measuring), then waits for review (pending). withdrawn: by the creator; archived: kept but hidden from lists unless status=archived is asked for.

    pendingrevision_requestedapprovedliverejectedmeasuringwithdrawnarchived
  • feedbackstringnullable

    The brand's note with its latest review, such as what to change in a revision.

  • shortIdstringnullable

    The short ID shown in the app and ad names.

  • submittedAtstringnullable
  • tagsstring[]
  • mediaobjectnullable
    Show 6 child fields
    • videoUrlstringnullable
    • thumbnailUrlstringnullable
    • durationSecondsnumbernullable
    • fileNamestringnullable
    • sizenumbernullable
    • contentTypestringnullable
  • platformPostobjectnullable

    The creator's published post this submission is, for a post.

    Show 9 child fields
    • idstringnullable

      The post's ID on its platform.

    • platformenum
      instagramtiktok
    • urlstringnullable
    • captionstringnullable
    • metricsobject
      Show 5 child fields
      • viewsnumbernullable
      • likesnumbernullable
      • commentsnumbernullable
      • sharesnumbernullable
      • savesnumbernullable
    • publishedAtstringnullable
    • paidViewsnumbernullable

      Views counted toward pay once measurement ends.

    • measurementEndsAtstringnullable
    • paymentApprovedAtstringnullable
  • transcriptobjectnullable
    Show 3 child fields
    • statusenum
      completedfailedpendingskippedunsupported
    • textstringnullable
    • segmentsobject[]nullable

      The transcript as timed lines, start and end in seconds from the video's start.

      Show 3 child fields
      • startnumber
      • endnumber
      • textstring
  • adsobjectnullable
    Show 4 child fields
    • identityenumnullable
      creatorbrand
    • launchedOnstring[]
    • ownershipstringnullable
    • programTypestringnullable
  • existingPostobject

    A brand's existing TikTok post to boost (added with post): no upload, it runs as itself. Absent for an uploaded video.

    Show 4 child fields
    • connectionconn_…

      The TikTok ad connection it runs on.

    • handlestringnullable
    • readyboolean

      Authorized to the advertiser, so campaigns can run it; false while waiting on the creator's Spark code, or once it expires.

    • authorizedUntilstringnullable
  • adAuthorizationobjectnullable

    The newest ad authorization asked for it (GET /v1/ad-authorizations).

    Show 5 child fields
    • idadauth_…
    • platformenum
      metatiktok
    • statusenum
      requestedgrantedrevokedexpired
    • authorizedAtstringnullable
    • expiresAtstringnullable
  • versioninteger

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

  • createdAtstring
  • updatedAtstring