A submission is a creator's video in a program. In organic programs it's also linked to the post where it went live, and Lucra measures that post's views.
Submit
Upload the video with purpose=submission, then submit it as the creator:
{
"program": "prog_00lhuAJjQgdtNt5WnqTBc95",
"file": "file_03d3QVSYynIFwgmYzYd7opT",
"note": "First cut"
}
- Add
postUrlfor an organic program. - Send
revisionOfwith the originalsub_ID to resubmit after changes are requested. - Submitting accepts any agreements the brand requires for submissions.
Review
Set status to approved, rejected, or revision_requested, with an optional note the creator sees:
{ "status": "revision_requested", "note": "Trim the intro to three seconds." }
A post can be approved or rejected once its measurement ends; approving pays the creator on its measured views. Then release the payment with { "payment": "approved" } (the brand's owner, admin, or own key).
Brand videos
A brand adds its own finished video (a file uploaded with purpose=ad_creative) to its library with { "file", "name" } and no program.
Endpoints
/v1/submissionsList submissions
lucra.submissions.list({ query })Query parameters
limitintegercursorstringcreatedAfterstringOnly items created at or after this time.
createdBeforestringOnly items created before this time.
programprog_…creatorcrtr_…statusstringOne or more, comma-separated: pending, revision_requested, approved, live, rejected, measuring, withdrawn, archived.
Response200A page of items, 18 fields each, and nextCursorShow
idsub_…typeenumpost: the creator's published Instagram or TikTok post; video: an uploaded video.
videopostprogramprog_…nullablecreatorcrtr_…nullablerevisionOfsub_…nullablestatusenumA 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_requestedapprovedliverejectedmeasuringwithdrawnarchivedfeedbackstringnullableThe brand's note with its latest review, such as what to change in a revision.
shortIdstringnullableThe short ID shown in the app and ad names.
submittedAtstringnullabletagsstring[]mediaobjectnullableShow 6 child fieldsHide child fields
videoUrlstringnullablethumbnailUrlstringnullabledurationSecondsnumbernullablefileNamestringnullablesizenumbernullablecontentTypestringnullable
platformPostobjectnullableThe creator's published post this submission is, for a post.
Show 9 child fieldsHide child fields
idstringnullableThe post's ID on its platform.
platformenuminstagramtiktokurlstringnullablecaptionstringnullablemetricsobjectShow 5 child fieldsHide child fields
viewsnumbernullablelikesnumbernullablecommentsnumbernullablesharesnumbernullablesavesnumbernullable
publishedAtstringnullablepaidViewsnumbernullableViews counted toward pay once measurement ends.
measurementEndsAtstringnullablepaymentApprovedAtstringnullable
transcriptobjectnullableShow 2 child fieldsHide child fields
statusenumcompletedfailedpendingskippedunsupportedtextstringnullable
adsobjectnullableShow 4 child fieldsHide child fields
identityenumnullablecreatorbrandlaunchedOnstring[]ownershipstringnullableprogramTypestringnullable
adAuthorizationobjectnullableThe newest ad authorization asked for it (GET /v1/ad-authorizations).
Show 5 child fieldsHide child fields
idadauth_…platformenumtiktokmetastatusenumrequestedgrantedrevokedexpiredauthorizedAtstringnullableexpiresAtstringnullable
versionintegerSend it back on PATCH to reject edits based on a stale read.
createdAtstringupdatedAtstring
/v1/submissions/:idGet a submission
lucra.submissions.retrieve({ path: { id } })Path parameters
idstringrequired
Response20018 fieldsShow
idsub_…typeenumpost: the creator's published Instagram or TikTok post; video: an uploaded video.
videopostprogramprog_…nullablecreatorcrtr_…nullablerevisionOfsub_…nullablestatusenumA 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_requestedapprovedliverejectedmeasuringwithdrawnarchivedfeedbackstringnullableThe brand's note with its latest review, such as what to change in a revision.
shortIdstringnullableThe short ID shown in the app and ad names.
submittedAtstringnullabletagsstring[]mediaobjectnullableShow 6 child fieldsHide child fields
videoUrlstringnullablethumbnailUrlstringnullabledurationSecondsnumbernullablefileNamestringnullablesizenumbernullablecontentTypestringnullable
platformPostobjectnullableThe creator's published post this submission is, for a post.
Show 9 child fieldsHide child fields
idstringnullableThe post's ID on its platform.
platformenuminstagramtiktokurlstringnullablecaptionstringnullablemetricsobjectShow 5 child fieldsHide child fields
viewsnumbernullablelikesnumbernullablecommentsnumbernullablesharesnumbernullablesavesnumbernullable
publishedAtstringnullablepaidViewsnumbernullableViews counted toward pay once measurement ends.
measurementEndsAtstringnullablepaymentApprovedAtstringnullable
transcriptobjectnullableShow 2 child fieldsHide child fields
statusenumcompletedfailedpendingskippedunsupportedtextstringnullable
adsobjectnullableShow 4 child fieldsHide child fields
identityenumnullablecreatorbrandlaunchedOnstring[]ownershipstringnullableprogramTypestringnullable
adAuthorizationobjectnullableThe newest ad authorization asked for it (GET /v1/ad-authorizations).
Show 5 child fieldsHide child fields
idadauth_…platformenumtiktokmetastatusenumrequestedgrantedrevokedexpiredauthorizedAtstringnullableexpiresAtstringnullable
versionintegerSend it back on PATCH to reject edits based on a stale read.
createdAtstringupdatedAtstring
/v1/submissionsSubmit work as a creator, or add a brand's own video to its library
lucra.submissions.create({ body })Body
programprog_…The program the work is for; required for a creator.
filefile_…requirednotestringpostUrlstringThe URL of the creator's published Instagram or TikTok post this video is; organic programs pay on its views.
revisionOfsub_…attestationobjectThe creator's content-compliance confirmations.
Show 4 child fieldsHide child fields
disclosureIncludedbooleanrequiredexperienceTruthfulbooleanrequirednoUnapprovedClaimsbooleanrequiredacceptedAgreementsobject[]The agreement versions the creator accepted by submitting; refused with 409 agreements_changed if the program now requires others.
Show 2 child fieldsHide child fields
agreementagr_…requiredversionintegerrequired
namestringA brand library video's title; defaults to its file name.
Response20118 fieldsShow
idsub_…typeenumpost: the creator's published Instagram or TikTok post; video: an uploaded video.
videopostprogramprog_…nullablecreatorcrtr_…nullablerevisionOfsub_…nullablestatusenumA 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_requestedapprovedliverejectedmeasuringwithdrawnarchivedfeedbackstringnullableThe brand's note with its latest review, such as what to change in a revision.
shortIdstringnullableThe short ID shown in the app and ad names.
submittedAtstringnullabletagsstring[]mediaobjectnullableShow 6 child fieldsHide child fields
videoUrlstringnullablethumbnailUrlstringnullabledurationSecondsnumbernullablefileNamestringnullablesizenumbernullablecontentTypestringnullable
platformPostobjectnullableThe creator's published post this submission is, for a post.
Show 9 child fieldsHide child fields
idstringnullableThe post's ID on its platform.
platformenuminstagramtiktokurlstringnullablecaptionstringnullablemetricsobjectShow 5 child fieldsHide child fields
viewsnumbernullablelikesnumbernullablecommentsnumbernullablesharesnumbernullablesavesnumbernullable
publishedAtstringnullablepaidViewsnumbernullableViews counted toward pay once measurement ends.
measurementEndsAtstringnullablepaymentApprovedAtstringnullable
transcriptobjectnullableShow 2 child fieldsHide child fields
statusenumcompletedfailedpendingskippedunsupportedtextstringnullable
adsobjectnullableShow 4 child fieldsHide child fields
identityenumnullablecreatorbrandlaunchedOnstring[]ownershipstringnullableprogramTypestringnullable
adAuthorizationobjectnullableThe newest ad authorization asked for it (GET /v1/ad-authorizations).
Show 5 child fieldsHide child fields
idadauth_…platformenumtiktokmetastatusenumrequestedgrantedrevokedexpiredauthorizedAtstringnullableexpiresAtstringnullable
versionintegerSend it back on PATCH to reject edits based on a stale read.
createdAtstringupdatedAtstring
/v1/submissions/:idReview, tag, file or archive a submission, or approve paying for a post; as its creator, withdraw it
lucra.submissions.update({ path: { id }, body })Path parameters
idstringrequired
Body
statusenumA 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.
pendingapprovedrejectedrevision_requestedwithdrawnarchivednotestringShown to the creator with a revision request or rejection.
tagsstring[]paymentstringFor an approved post: approves paying the creator its finalized earnings (the brand's owner, admin or own key).
approvedversioninteger
Response20018 fieldsShow
idsub_…typeenumpost: the creator's published Instagram or TikTok post; video: an uploaded video.
videopostprogramprog_…nullablecreatorcrtr_…nullablerevisionOfsub_…nullablestatusenumA 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_requestedapprovedliverejectedmeasuringwithdrawnarchivedfeedbackstringnullableThe brand's note with its latest review, such as what to change in a revision.
shortIdstringnullableThe short ID shown in the app and ad names.
submittedAtstringnullabletagsstring[]mediaobjectnullableShow 6 child fieldsHide child fields
videoUrlstringnullablethumbnailUrlstringnullabledurationSecondsnumbernullablefileNamestringnullablesizenumbernullablecontentTypestringnullable
platformPostobjectnullableThe creator's published post this submission is, for a post.
Show 9 child fieldsHide child fields
idstringnullableThe post's ID on its platform.
platformenuminstagramtiktokurlstringnullablecaptionstringnullablemetricsobjectShow 5 child fieldsHide child fields
viewsnumbernullablelikesnumbernullablecommentsnumbernullablesharesnumbernullablesavesnumbernullable
publishedAtstringnullablepaidViewsnumbernullableViews counted toward pay once measurement ends.
measurementEndsAtstringnullablepaymentApprovedAtstringnullable
transcriptobjectnullableShow 2 child fieldsHide child fields
statusenumcompletedfailedpendingskippedunsupportedtextstringnullable
adsobjectnullableShow 4 child fieldsHide child fields
identityenumnullablecreatorbrandlaunchedOnstring[]ownershipstringnullableprogramTypestringnullable
adAuthorizationobjectnullableThe newest ad authorization asked for it (GET /v1/ad-authorizations).
Show 5 child fieldsHide child fields
idadauth_…platformenumtiktokmetastatusenumrequestedgrantedrevokedexpiredauthorizedAtstringnullableexpiresAtstringnullable
versionintegerSend it back on PATCH to reject edits based on a stale read.
createdAtstringupdatedAtstring