> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apostra.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Update measurement source

> Partially update a registered measurement source

`PATCH /api/v2/buyer/advertisers/{advertiserId}/measurement-sources/{sourceId}`

Updates a measurement source. Send only the fields you want to change; omitted fields keep their current values. `sourceKey` is fixed at creation and cannot be changed here.

## Request

<CodeGroup>
  ```bash curl theme={null}
  curl -X PATCH https://api.apostra.com/api/v2/buyer/advertisers/12345/measurement-sources/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
    -H "Authorization: Bearer $SCOPE3_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "status": "paused",
      "signalWeight": 0.5,
      "lagWeeks": 2
    }'
  ```
</CodeGroup>

## Parameters

| Field | Type | Required | Notes |
| - | - | - | - |
| `advertiserId` | string | Yes | Path parameter — the owning advertiser |
| `sourceId` | string | Yes | Path parameter — the source ID |
| `name` | string | No | Human-readable label |
| `outcomeType` | string | No | Primary outcome the source reports |
| `outcomeTypes` | string\[] | No | Additional outcome types |
| `granularity` | string | No | Reporting grain (e.g. `geo_week`) |
| `lagWeeks` | integer | No | Expected reporting lag in weeks |
| `cadence` | enum | No | `continuous`, `daily`, `weekly`, `biweekly`, `monthly`, `quarterly` |
| `provider` | string | No | Partner name |
| `ingestionMethod` | string | No | How records arrive |
| `attributionConfig` | object | No | Free-form provider attribution settings |
| `signalWeight` | number | No | Weight in belief updates, 0–1 |
| `status` | enum | No | `pending`, `active`, `paused` |
| `notes` | string | No | Free-text notes |
| `vendor` | object \| null | No | The measurement vendor: `domain` and optional `brandId`. Send `null` to clear it; clearing fails while `vendorMetrics` is not empty |
| `vendorMetrics` | object\[] | No | Replaces the full list of `{ metricId, outcomeType }` entries. Send `[]` to clear it |

## Response

```json theme={null}
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "advertiserId": "12345",
  "sourceKey": "acme_incr_rev",
  "name": "Acme Incrementality",
  "outcomeType": "incremental_revenue",
  "outcomeTypes": [],
  "granularity": "geo_week",
  "cadence": "weekly",
  "provider": "acme-mmm",
  "lagWeeks": 2,
  "signalWeight": 0.5,
  "status": "paused",
  "vendor": null,
  "vendorMetrics": [],
  "createdAt": "2026-01-15T10:30:00Z",
  "updatedAt": "2026-03-20T14:45:00Z"
}
```

Returns the full source after the patch.

## Errors

* `400 VALIDATION_ERROR` — invalid `cadence`/`status` or `signalWeight` outside 0–1.
* `400 VALIDATION_ERROR` — after the update, `vendorMetrics` would be non-empty without a `vendor`, would list a `metricId` twice, or would map a metric to an outcome type the source no longer declares. Changing `outcomeType` or `outcomeTypes` is checked against the stored metrics too.
* `404 NOT_FOUND` — `sourceId` (or `advertiserId`) does not exist or is not visible to the authenticated account.

See [Errors](/v2/reference/errors) for the full error contract.

## Related

<CardGroup cols={2}>
  <Card title="Measurement tasks" href="/v2/buyer/measurement/tasks" icon="list-check">
    All measurement operations
  </Card>

  <Card title="Measurement overview" href="/v2/guides/measurement-incrementality" icon="chart-line">
    Pipeline, belief state, and concepts
  </Card>

  <Card title="Get measurement source" href="/v2/buyer/measurement/tasks/get-measurement-source" icon="magnifying-glass">
    Read the current source
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.