---
title: "SyncRule"
description: "one way or two ways from the same rows: pull arms cells, push runs as a move, a conflict is decided by the rule"
section: concepts
address: /concepts/syncrule
contract: 0476e35e6e275db5
---

# SyncRule

one way or two ways from the same rows: pull arms cells, push runs as a move, a conflict is decided by the rule

[figure: SyncRule is a definition at follows scope. The drawing shows its fields and the objects that they point at.]

| property | value |
|---|---|
| kind | definition |
| scope | follows |
| key | the installed connector and the offer, versioned |
| store | postgres |
| family | sources |



## Fields


| field | type | required | note |
|---|---|---|---|
| `installed_connector` | `id` | yes |  |
| `offer` | [SyncOffer](/concepts/syncoffer) | yes |  |
| `direction` | `one of pull \| push \| both` | yes |  |
| `push_mappings` | [PushMapping](/concepts/pushmapping) | yes | the reverse of the mapping's pull side |
| `pushes` | [Predicate](/concepts/predicate) | no | over entities or leads, previewed first |
| `conflict` | `one of the source wins \| the record wins \| the newest valid time wins \| ask` | yes |  |
| `cadence` | `duration` | no | pull arms cells at it |
| `grant` | `id` | yes | the mode a push runs under |
| `state` | [Readiness](/concepts/readiness) | yes |  |



## Routes that use it
No route takes or returns SyncRule directly. The record holds it, and the objects that point at it reach it.
