Reference

Build on the Lucra API.

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

Programs

Programs, pay, applications and agreements.

A program is a brief with pay terms. Creators join it through an application, submit work, and get paid on approval or on how their work performs.

Create a program

A program needs a name, a type, a visibility and its pay. This one pays $8 per 1,000 views on creators' posts, up to $500 each:

JSON
{
  "name": "Spring launch",
  "type": "organic",
  "visibility": "network",
  "brief": "Show the jacket on a real trail run.",
  "pay": {
    "rules": [{ "per": "view", "amount": 800, "unit": 1000 }],
    "cap": 50000,
    "schedule": { "after": "measurement", "days": 7 }
  },
  "promoted": { "products": ["prod_04bst9MGXqblfqHhbR1iGGL"] },
  "agreements": ["agr_0HxY6vD1bN4tK8qLm2Rz9sW"]
}
  • type is organic (paid on creators' own posts) or paid_ads (paid on ads made from their work).
  • visibility is invite (only creators you add) or network (any creator can apply).
  • promoted.products are the products creators can request samples of.
  • agreements are the agreements creators accept by joining.

The brand needs a payment method first, or you get 409 requirement_payment_method.

PATCH /v1/programs/:id changes any of these. Every change in one request applies together, or none does. Set status to paused, open or archived.

Pay

Each type pays per result in its own way:

TypePaid per resultWhen
paid_adsA percent of ad spend or revenue, or per leadAs results come in
organicPer 1,000 views, or per postAfter a 1–30 day measurement

On top of that, add flat pay per approved submission, per install, per click, or per conversion on the brand's site, all under a cap. The full pay object is described in Payments. Pay that could never be paid as set is refused with 422 invalid_pay.

Changing a program's pay creates a new version. Creators already in the program move to it on their next action there. To set one creator's pay, send pay on PATCH /v1/applications/:id.

Applications

An application is a creator's place in a program. There are two ways in:

  • A brand adds a creator with { "program", "creator" }. They join approved and are notified.
  • A creator applies to a network program with { "program" }, acting as themselves.
TypeScript
await lucra.applications.create({
  body: { program: "prog_00lhuAJjQgdtNt5WnqTBc95", creator: "crtr_026UYfiw1Y6OvUpuKWiOpeL" },
})

Review an application with PATCH /v1/applications/:id and status: approved, rejected, or pending to reopen it.

Applying or joining is how a creator accepts the program's agreements; there's no separate signing step. Show the agreements under your button, like "By applying you agree to …". A creator a brand added still has to accept while agreementsRequired is true: they do it with PATCH /v1/applications/:id and { "status": "approved" }.

Agreements

Publish a PDF (uploaded with purpose=agreement) with POST /v1/agreements, then list it in a program's agreements. GET /v1/agreements/acceptances lists who accepted what.

Posts

GET /v1/posts lists the creators' posts your organic programs pay for, with their views and earnings.

Endpoints

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