Contacts
Create, read, update, and upsert contacts via /api/v1/contacts.
Base path
/api/v1/contacts
Custom fields
Custom fields are keyed by the field's UUID, not its key. Fetch the field UUID from GET /api/v1/custom-fields (in the dashboard for now - public API endpoint coming soon) before writing to customFields.
Fields
| Field | Type | Notes |
| ----- | ---- | ----- |
| id | uuid | StrideOps-issued. |
| externalId | string? | Your system's id, for upserts via matchOn: "externalId". |
| firstName | string? | |
| lastName | string? | |
| email | string? | Validated, normalized to lowercase. |
| phone | string? | E.164 format required. |
| companyId | uuid? | FK to companies. |
| tags | string[] | Free-form. Reused tags are auto-suggested in UI. |
| customFields | object | UUID-keyed JSON. |
| source | string? | Attribution string (e.g. "meta-lead-ad", "calendly-import"). |
| createdAt | iso8601 | |
| updatedAt | iso8601 | |
Deletes are soft
DELETE hides the record from listings but keeps it for 30 days for audit. Permanent deletion requires the dashboard's privacy tooling.