Get startedREST or GraphQL?
REST or GraphQL?
The Coevera API has a REST and a GraphQL interface over the same data. How they differ in paths and naming, and which business actions only GraphQL has.
Answer
Both reach the same data with the same credentials. REST suits create, read, update and delete, with kebab-case query parameters and snake_case bodies. GraphQL uses camelCase names and has the business actions REST lacks: qualifying a lead exists only there, while move, change owner and lost have a REST PATCH that skips the actions' extras.
Every page of these docs shows both interfaces where both exist. They share the space, the records, the permissions and the API application's credentials; they differ in shape and in what they can do.
Side by side
| REST | GraphQL | |
|---|---|---|
| Endpoint | /, one path per entity |
POST /, one endpoint; a GET answers 405 |
| Query parameters | kebab-case: load-only, order-by, filter-op, include-deleted (querying) |
Arguments in camelCase: first, after, orderBy, includeDeleted |
| Field names | snake_case, in bodies and responses: owner_, step_, is_ |
camelCase: ownerId, stepId, isArchived |
| Lists | success, total, page_, data (pagination) |
totalCount, pageInfo, edges |
| Date-times | A space between date and time: 2026-10-14 09:00:00+00:00 |
A T: 2026-10-14T09:00:00+00:00 (dates and time zones) |
| Writes | POST, PATCH, DELETE and batch endpoints per entity |
Mutations such as createAccount |
| Business actions | None; a PATCH of the field instead (below) |
Qualify, move, change owner, archive and more |
| Contract | The OpenAPI document, described in the REST reference | The public GraphQL schema, described in the GraphQL reference |
The quickstart makes the same first call both ways, and the downloads have both contracts as files.
Business actions
The CRM's actions on leads and opportunities are GraphQL mutations. REST has only create, read, update and delete, so for most actions it changes the field instead:
| Action | GraphQL | What REST can do instead |
|---|---|---|
| Qualify | qualifyLead |
Nothing. Qualifying converts the lead into an opportunity with the same id; REST cannot reproduce it. |
| Move | moveOpportunity, moveLead |
PATCH step_ |
| Change owner | changeOwnershipOpportunity, and one per entity |
PATCH owner_ |
| Won | A move to the pipeline's last step; there is no separate won action | PATCH step_ to the last step |
| Lost | archiveOpportunity: archiving; there is no separate lost action |
PATCH is_ |
A REST PATCH changes the record and writes the same history entries and webhook events as the
GraphQL action. It skips what the action adds:
- a memo (
memoText); - completing activities (
completeActivityIds); - accepting or archiving quotes (
acceptQuoteIds,archiveQuoteIds); - keeping the old owner as an editor (
keepOwnerAsEditor); - transferring linked records (
transferLinkedRecords); - the lost form's required fields.
Use the GraphQL action when you need any of these. The lead lifecycle recipe qualifies a lead, moves the opportunity and changes its owner with them, and create an account with contacts shows the same writes in both APIs.
Choosing
- Synchronising records (create, read, update, delete, batches): REST. Every entity has the same operations, which makes it the steadier choice for long-lived integrations.
- Business actions (qualify, move with a memo, change owner with linked records): GraphQL.
- Fetching related records in one call: either. REST has
expand; GraphQL selects nested fields.
Removals from the public GraphQL schema are announced in the API changelog before they happen. For long-lived integrations, prefer REST for create, read, update and delete, and GraphQL for the business actions REST does not have.
Limits
- REST has no action endpoints: no qualify, no move with a memo, no change of owner that transfers linked records.
- The public GraphQL schema is the one at
…/graphql/public. The CRM's own app schema is a different, internal one: do not build on it.