A valid request URL is required to generate request examples{
"success": true,
"data": {
"id": "rec_7f2a01",
"objectType": "contacts",
"source": "api",
"externalId": "crm_88213",
"fields": {
"name": "Dana Ruiz",
"phone": "+14155550142",
"email": "dana@example.com",
"plan": "Gold"
},
"fieldUpdatedAt": {
"name": "2026-07-12T10:00:00.000Z",
"plan": "2026-07-12T10:00:00.000Z"
},
"phoneE164": "+14155550142",
"email": "dana@example.com",
"tombstonedAt": null,
"createdAt": "2026-07-12T10:00:00.000Z",
"updatedAt": "2026-07-12T10:00:00.000Z"
}
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}Upsert a caller-context record
Creates or updates one external record, keyed on (object type, source, external ID). Incoming fields are shallow-merged — they win and are timestamped, while omitted fields are preserved — and the object type’s field registry is learned from the write. A write also restores a previously deleted record. externalId is required. Rate-limited per organization (429 with Retry-After).
A valid request URL is required to generate request examples{
"success": true,
"data": {
"id": "rec_7f2a01",
"objectType": "contacts",
"source": "api",
"externalId": "crm_88213",
"fields": {
"name": "Dana Ruiz",
"phone": "+14155550142",
"email": "dana@example.com",
"plan": "Gold"
},
"fieldUpdatedAt": {
"name": "2026-07-12T10:00:00.000Z",
"plan": "2026-07-12T10:00:00.000Z"
},
"phoneE164": "+14155550142",
"email": "dana@example.com",
"tombstonedAt": null,
"createdAt": "2026-07-12T10:00:00.000Z",
"updatedAt": "2026-07-12T10:00:00.000Z"
}
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}Authorizations
Flowyte secret API key (Authorization: Bearer flowyte_sk_live_…). Scope-gated; is scoped to your organization — a key can never reach another tenant. The listed scopes in each operation's apiKey requirement are the scopes that key must hold. The tokenUrl is nominal: keys are minted in the dashboard.
- Token URL
- /api/v1/api-keys
Body
The object type (e.g. "contacts"); learned on first write.
The record's id in your source app (REQUIRED; the upsert identity).
The syncing app (default "api"; the Zapier app passes "zapier"). Part of the identity.
The (possibly partial) field map to shallow-merge in.