# Upsert a project's price rows

> Upserts project + provider-slug price rows, keyed on (provider, model, effective_from). A row covers all of the project's instances of that provider slug. Authorized by the caller's access to the project. `effective_from` must be in the future once the (provider, model, component) is priced — past prices are immutable, so corrections ship as new future-dated rows. A first price, with no row for the project or the global default, may be dated now or earlier.

<Heading
  as={"h1"}
  className={"openapi__heading"}
  children={"Upsert a project's price rows"}
>
</Heading>

<MethodEndpoint
  method={"put"}
  path={"/api/v1/projects/{project_id}/prices"}
  context={"endpoint"}
>
  
</MethodEndpoint>

Upserts project + provider-slug price rows, keyed on (provider, model, effective_from). A row covers all of the project's instances of that provider slug. Authorized by the caller's access to the project. `effective_from` must be in the future once the (provider, model, component) is priced — past prices are immutable, so corrections ship as new future-dated rows. A first price, with no row for the project or the global default, may be dated now or earlier.

<Heading
  id={"request"}
  as={"h2"}
  className={"openapi-tabs__heading"}
>
  <Translate id="theme.openapi.request.title">Request</Translate>
</Heading>

<ParamsDetails
  {...require("./update-project-prices.ParamsDetails.json")}
>
  
</ParamsDetails>

<RequestSchema
  {...require("./update-project-prices.RequestSchema.json")}
>
  
</RequestSchema>

<StatusCodes
  {...require("./update-project-prices.StatusCodes.json")}
>
  
</StatusCodes>
