The Glime API
Everything in Glime is addressable: records, products, pricing, quotes, approval workflows and a full export of your workspace. ERP, accounting, procurement and e-commerce platforms integrate without custom database access.
This page is split deliberately. Available now is what the backend answers
today and what you can build against this afternoon. Designed, not yet shipped is
the contract the roadmap is held to — published so an integration you build now still fits when it
lands, and marked so nobody plans a launch around it. The build order is tracked in
erp-integration.md.
GlimeData.list/get/create), so integrations built against the shipped surface will
not need rework.
Authentication Available now
The API takes the same bearer session token the Glime app signs in with. Post your credentials
to /api/v1/auth/login and send the token it returns on every call. Tokens are
revocable: changing a password or signing out everywhere invalidates every token already issued.
curl -s https://your-glime-host/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com","password":"…"}'
curl https://your-glime-host/api/v1/account \
-H "Authorization: Bearer <token>"
Because that token belongs to a person, it carries that person's role: the API can never return more than the signed-in user could see in the app. That is the right default and the wrong ergonomics for a nightly ERP sync, which is what non-interactive API keys below are for.
API keys Roadmap
Scoped, rotatable keys created per workspace in Settings → API, sent as a bearer token and belonging to the workspace rather than to a person — so a sync does not break when someone leaves. Planned shape:
curl https://api.glimecrm.com/v1/accounts \
-H "Authorization: Bearer glime_sk_live_…"
REST resources Available now
Everything here is mounted under /api/v1 and answers today. Every query is scoped
to your workspace, and reads are filtered by the signed-in user's role.
| Resource | Endpoints | Notes |
|---|---|---|
/v1/account | GET, POST, PATCH, DELETE | Company records. Same generic contract for every object below. |
/v1/contact | GET, POST, PATCH, DELETE | People, with the activity timeline |
/v1/lead | GET, POST, PATCH, DELETE | Scoring and routing fields |
/v1/opportunity | GET, POST, PATCH, DELETE | Pipeline and stages |
/v1/product | GET, POST, PATCH, DELETE | Catalogue, with category and price |
/v1/contract, /v1/sales-order | GET, POST, PATCH, DELETE | Professional and up — a Starter workspace gets a 402 |
/v1/cpq/quotes | GET, POST | Create a quote; it is priced on the server, never from a posted total |
/v1/cpq/quotes/{id}/submit | POST | Build the approval chain from the published policy |
/v1/cpq/quotes/{id}/decide | POST | Approve or reject a step, with a reason. A rep can never approve their own quote. |
/v1/cpq/quotes/{id}/share | POST | Mint a customer link for an approved quote |
/v1/_export | GET | Full workspace export — every object, on any plan, and still served if your term lapses |
/v1/_layout | GET, PUT | The workspace's field layout |
/v1/cpq/config | GET, PUT | The published CPQ configuration and its staged draft |
/v1/integrations | GET | The connector catalogue and this workspace's connections. Professional and up. |
/v1/integrations/{slug}/connect | POST | Store a credential, encrypted. Admin only; never readable back. |
/v1/integrations/{slug}/push/{quoteId} | POST | Hand an approved quote to the connector. A quote that has not cleared its chain is refused. |
/v1/integrations/{slug}/sync | POST | Run everything pending for that connector |
/v1/integrations/jobs | GET | The push log, with each vendor's own error text |
/v1/integrations/{slug}/push-contract/{id} | POST | Hand a signed contract across. One still under negotiation is refused. |
/v1/integrations/{slug}/pull | POST | Bring sales orders back. Only orders this workspace pushed are taken. |
/v1/integrations/webhooks/subscriptions | GET, POST, DELETE | Outbound webhook subscriptions |
Designed, not yet shipped Roadmap
Published so an integration you build today still fits when these land. None of them answers yet; a call to one gets a 404.
| Resource | Endpoints | Notes |
|---|---|---|
/v1/quotes/{id}/price | POST | Standalone pricing run against an unsaved quote |
/v1/quotes/{id}/pdf | POST | Render branded proposal (PDF/Word/HTML) |
/v1/ai/recommendations | POST | Roadmap: bundle suggestions, pricing-mistake detection, upsells |
GraphQL Roadmap
Designed, not shipped — there is no GraphQL endpoint today. The intended shape, one endpoint at
https://api.glimecrm.com/graphql for cross-object reads in a single round trip:
query DealDesk($id: ID!) {
opportunity(id: $id) {
name stage amount winProbability
account { name industry }
quotes {
number version total status
lines { product qty unitPrice discount net }
approvals { step approver status }
}
}
}
Outbound webhooks Available now
Subscribe to quote.created, quote.version.created,
approval.requested, approval.completed, contract.signed,
order.created and export.completed. Create a subscription at
POST /v1/integrations/webhooks/subscriptions with an https URL and
the events you want; the signing secret is returned once and never again.
Every delivery carries X-Glime-Signature — sha256= followed by an
HMAC-SHA256 of the raw body with your secret — plus X-Glime-Event and
X-Glime-Delivery. Verify against the raw bytes; a re-serialized body will not match.
The timestamp is inside the signed payload as sentAt, not in a header, so a captured
delivery cannot be replayed indefinitely.
A non-2xx is retried with exponential backoff for 24 hours, then dead-lettered with the status your endpoint returned. A 4xx is treated as terminal — if the request is wrong, it will be wrong next time too.
{
"event": "approval.completed",
"sentAt": "2026-09-22T18:30:00.000Z",
"data": { "quote": "q-2214", "status": "approved" }
}
Rate limits
There is no metered API tier and no per-call charge. Nothing on the pricing page sells API calls, so nothing here bills for them. What exists today is abuse protection: sign-in is rate limited per account and per IP, and an account locks out after repeated failures.
Per-key quotas and usage reporting arrive with API keys. When they do, hard caps will be configurable so a runaway integration can never surprise you on an invoice — and if a paid tier is ever introduced, it will be on the pricing page before it is on this one.
Errors
{
"error": {
"type": "validation_error",
"code": "discount_exceeds_threshold",
"message": "35% discount requires Finance approval.",
"docs": "https://glimecrm.com/developers.html#approvals"
}
}