## MedplumClient.upsertResource() method [​](/content/docs/sdk/core.medplumclient.upsertresource#medplumclientupsertresource-method/index.html)

Upsert a resource: update it in place if it exists, otherwise create it. This is done in a single, transactional request to guarantee data consistency.

**Signature:**

```typescript
upsertResource<T extends Resource>(resource: T, query: QueryTypes, options?: MedplumRequestOptions): Promise<WithId<T>>;
```

## Parameters [​](/content/docs/sdk/core.medplumclient.upsertresource#parameters/index.html)

| Parameter | Type | Description |
| --- | --- | --- |
| resource | T | The resource to update or create. |
| query | [QueryTypes](/content/docs/sdk/core.querytypes) | A FHIR search query to uniquely identify the resource if it already exists. |
| options | [MedplumRequestOptions](/content/docs/sdk/core.medplumrequestoptions) | _(Optional)_ Optional fetch options. |

**Returns:**

Promise< [WithId](/content/docs/sdk/core.withid) <T>>

The updated/created resource.

- [MedplumClient.upsertResource() method](/content/docs/sdk/core.medplumclient.upsertresource#medplumclientupsertresource-method/index.html)
- [Parameters](/content/docs/sdk/core.medplumclient.upsertresource#parameters/index.html)
