Record what a Line Item spawned
Records one provider object that this Line Item created. The caller that created the object writes this record, because only that caller knows which line the object belongs to.
A record is a fact, not an attempt. AdCrunch keeps the attempts in the mutation ledger.
This call refuses almost nothing. The provider object already exists, and a refusal would leave it live and untracked. A draft line records, an edited line records, and a line on a channel AdCrunch cannot write to records. The state of the line does not change, and neither does the state of the Campaign Plan.
The same object recorded again answers 200 with the existing row, and not 201. The same object is the same provider, the same level and the same native id, on the same line.
AdCrunch never removes a record. It can tell you how many objects a line created. It cannot tell you how many objects a line must create, because a Campaign Plan never declares that number.
/context/campaign-plans/{slug}/line-items/{lineItemId}/executionsAuthorizationBearer token · headerrequiredSend Authorization: Bearer <credential>.
Use an API key (acr_…), from the AdCrunch console under Settings → API keys.
The credential names the organization, and no operation takes an organization parameter.
See https://docs.adcrunch.dev/api/authentication.
lineItemIdstringrequiredslugstringrequiredapplication/jsonadvertiser_idstringrequiredThe ad account the object was created in.
entity_idstringrequiredThe native provider id, unprefixed — exactly as the Insight entities table holds it, which is what makes the two joinable.
entity_typestringrequiredThe provider’s own word for the level: campaign, adset, ad. Free text, because the vocabulary is the provider’s.
mutation_workflow_idstringThe mutation that performed the write, when known — links this fact to the attempt without either duplicating the other.
providerstringrequiredShow propertiesHide properties
stringstringstringstringstringstringstringThis object was already recorded against this line. The existing row comes back unchanged, so the call is idempotent — recording twice does not inflate what the line has spawned.
advertiserIdstringrequiredcreatedAtnumberrequiredMilliseconds since the Unix epoch, UTC.
entityIdstringrequiredThe provider’s own id, unprefixed, so it joins to entities.
entityTypestringrequiredThe provider’s word for the level — campaign, adset, ad.
idstringrequiredmutationWorkflowIdstring | nullrequiredThe durable execution that performed the write, when known.
providerstringrequiredRecorded. Neither response shape was observed against the deployed service, because the verification organization has no connected advertiser — both are written from the Context Layer’s view type.
advertiserIdstringrequiredcreatedAtnumberrequiredMilliseconds since the Unix epoch, UTC.
entityIdstringrequiredThe provider’s own id, unprefixed, so it joins to entities.
entityTypestringrequiredThe provider’s word for the level — campaign, adset, ad.
idstringrequiredmutationWorkflowIdstring | nullrequiredThe durable execution that performed the write, when known.
providerstringrequiredThe request does not match the schema of this operation: a field is missing or has the wrong type, or the body is not valid JSON. error is invalid_request, and issues names each field. Nothing was changed.
issuesobject[]requiredOne entry for each field that does not match.
Show propertiesHide properties
objectinstringrequiredThe part of the request that holds the field.
bodycookieheadersparamsquerymessagestringrequiredA sentence to show a person. Written to say what to do next. Reworded whenever it can be said better, so never branch on it.
pathstringrequiredA JSON Pointer into that part of the request, such as /filename. An empty string is the whole part.
errorstringrequiredA stable code for the failure. This is the field to branch on. It does not change for a given failure.
invalid_requestmessagestringrequiredA sentence to show a person. Written to say what to do next. Reworded whenever it can be said better, so never branch on it.
No API key, or one that does not resolve. See the security scheme. error is unauthorized.
errorstringrequiredA stable code for the failure. This is the field to branch on. It does not change for a given failure.
unauthorizedmessagestringrequiredA sentence to show a person. Written to say what to do next. Reworded whenever it can be said better, so never branch on it.
The caller does not hold campaign_plan:write. error is forbidden.
errorstringrequiredA stable code for the failure. This is the field to branch on. It does not change for a given failure.
forbiddenmessagestringrequiredA sentence to show a person. Written to say what to do next. Reworded whenever it can be said better, so never branch on it.
No such plan, or no Line Item with that id on it. error is not_found.
errorstringrequiredA stable code for the failure. This is the field to branch on. It does not change for a given failure.
messagestringrequiredA sentence to show a person. Written to say what to do next. Reworded whenever it can be said better, so never branch on it.
That ad account is not connected to this organization. error is advertiser_not_owned. Almost nothing else is refused here, deliberately: the provider object already exists, and refusing the record would leave it live and untracked.
errorstringrequiredA stable code for the failure. This is the field to branch on. It does not change for a given failure.
messagestringrequiredA sentence to show a person. Written to say what to do next. Reworded whenever it can be said better, so never branch on it.