API reference · v1
OG Manager REST API
Base URL
https://api.ogmanager.com/api/v1All requests use HTTPS and JSON. Send Accept-Language: en or bn to get messages in English or Bangla. Every response carries an X-Request-Id header; quote it when you contact support.
Authentication
Server integrations use API keys or service accounts. The organization always comes from the key, never from a header you send.
eos_live_<id>_<secret> # production
eos_test_<id>_<secret> # sandbox organizationcurl https://api.ogmanager.com/api/v1/entitlements \
-H "Authorization: Bearer eos_live_<id>_<secret>"- The secret is shown once at creation. Only a SHA-256 hash is stored.
- Keys are scoped (for example
data:read,crm:write), metered, rate-limited, can expire and can be revoked at any time. - Service accounts add expiry and rotation for long-running server integrations.
- Send
X-Branch-Id: <uuid>to filter to one branch within the key's scope. - The API is included on Starter and above. On Free, calls return
402 ENTITLEMENT_ERROR.
Envelope
Every success is wrapped in data and meta. Every error has the same shape.
{
"data": { "id": "0192f0c4-…", "display_id": "LEAD-000412", "name": "Nusrat Jahan" },
"meta": { "request_id": "01JB8Z3K6Q2W9Y4T0M5R7N1P8C" }
}{
"error": {
"code": "ENTITLEMENT_ERROR",
"message": "Your plan does not include this feature.",
"request_id": "01JB8Z3K6Q2W9Y4T0M5R7N1P8C",
"details": { "feature": "bos.growth", "upgrade_to": "growth" }
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "The given data was invalid.",
"request_id": "01JB8Z…",
"details": { "fields": { "email": ["Enter a valid email."] } }
}
}Money is always integer minor units plus an ISO currency code, for example { "amount_minor": 1490000, "currency": "BDT" } for ৳14,900. Records carry id, display_id, branch_id, created_at, updated_at, archived_at, version.
Pagination, filters and sorting
GET crm/leads?limit=50&filter[status]=open&sort=-created_at&q=nusrat
GET crm/leads?cursor=eyJpZCI6…&limit=50- Cursor pagination with
?cursor=&limit=, maximum 100. The next cursor is inmeta.next_cursor; null means the last page. - Filters as
?filter[status]=open, sorting as?sort=-created_at, search as?q=. - Sparse fields with
?fields=and related objects with?include=.
Idempotency and concurrency
Retries are safe as long as you reuse the same key for the same logical operation.
curl -X POST https://api.ogmanager.com/api/v1/crm/leads \
-H "Authorization: Bearer eos_live_<id>_<secret>" \
-H "Idempotency-Key: 6f1c2a9e-3b7d-4e0a-9c55-2f8d1b4a7e10" \
-H "Content-Type: application/json" \
-d '{"name":"Nusrat Jahan","phone":"+8801711000000","source":"website"}'Idempotency-Keyis required on every create, send, pay and action endpoint, and stored for 24 hours.- Updates to versioned records send
If-Match: <version>. A stale version returns409 CONFLICTwith the current version.
Versioning and long-running work
The API is versioned in the path (/api/v1). No sync, report render or AI call runs inside an HTTP request: long work returns 202 with a job you can poll.
POST reports/0192…/run
→ 202 { "data": { "job_id": "job_01JB…", "status": "queued" } }
GET jobs/job_01JB…
→ 200 { "data": { "id": "job_01JB…", "status": "running", "progress": 40 } }Error codes
Endpoint catalogue
Paths are relative to the base URL. The phase column shows when each group ships; later groups follow the same envelope and conventions.
Webhooks
Outbound deliveries are signed so you can prove they came from OG Manager.
Este-Signature: t=<ts>,v1=<hmac-sha256>tis the Unix timestamp of the delivery;v1is the hex HMAC-SHA256 of<ts>.<raw body>with your endpoint secret.- Compare signatures in constant time and reject timestamps older than five minutes.
- Each delivery carries an event ID, timestamp and version. De-duplicate on the event ID.
- Retries use exponential backoff for 24 hours; 50 consecutive failures disable the endpoint. Replay with
POST webhook-deliveries/{id}/replay.
To send your own website or app events (page view, add to cart, purchase, form submit) for attribution and journeys, use POST events.
Rate limits
Limits apply per key and per endpoint and are returned in X-RateLimit-* headers. When you exceed one you get 429 RATE_LIMIT with a Retry-After header. Monthly API call allowances by plan: Starter 10,000, Growth 100,000, Pro 500,000, Agency 1,000,000, Enterprise unlimited.