Keep'emKeep'em

Getting Started

This guide covers the conventions and patterns you'll encounter when working with the Keep'em API. For authentication setup, see Authentication.

Want to jump straight in? Make sure you have an API key, then try creating an event.

Base URL

All API requests are made to:

https://api.keepem.io/v1

Request format

ConventionDetail
Content typeapplication/json for all request bodies
Query parametersStandard URL encoding
DatesISO 8601 (2026-03-05T10:00:00Z)
IDsUUIDs
HTTP methodsGET (read), POST (create), PUT (full update), PATCH (partial update), DELETE (remove)

Errors

The API returns errors in RFC 7807 Problem Details format with Content-Type: application/problem+json.

Error response
{
  "type": "https://keepem.io/docs/api-reference/errors#validation-error",
  "title": "Bad Request",
  "status": 400,
  "detail": "Property 'name' is required but is missing.",
  "instance": "/v1/events",
  "errors": [
    {
      "field": "name",
      "message": "required field"
    }
  ]
}

Error fields

FieldDescription
typeURI identifying the error type
titleShort, human-readable summary (stable across occurrences)
statusHTTP status code
detailHuman-readable explanation specific to this occurrence
instanceURI identifying this specific occurrence
errorsOptional array of field-level validation errors

HTTP status codes

CodeMeaning
200Success
201Created
204No content (successful delete)
400Bad request — invalid parameters or body
401Unauthorized — missing or invalid credentials
403Forbidden — valid credentials but insufficient permissions
404Not found
409Conflict — resource already exists
422Unprocessable entity — validation failed
429Too many requests — rate limit exceeded
500Internal server error

Rate limits

API requests are rate limited to ensure fair usage. When you exceed the limit, you'll receive a 429 response.

Rate limit headers

Every response includes rate limit information:

HeaderDescription
X-RateLimit-LimitMaximum requests per window
X-RateLimit-RemainingRequests remaining in current window
X-RateLimit-ResetUnix timestamp when the window resets
Retry-AfterSeconds to wait before retrying (only on 429 responses)

Handling rate limits

When you receive a 429 response:

  1. Read the Retry-After header for the wait duration
  2. Wait the specified number of seconds
  3. Retry the request

For production integrations, implement exponential backoff with jitter to avoid thundering herd issues when multiple clients retry simultaneously.

Pagination

List endpoints return paginated results. Use query parameters to control pagination:

ParameterTypeDefaultDescription
pageinteger1Page number (1-indexed)
limitinteger20Items per page (max 100)
Paginated request
curl "https://api.keepem.io/v1/events?page=2&limit=10" \
  -H "X-API-Key: sk_live_your_secret_key"

Responses include pagination metadata:

Paginated response
{
  "data": [...],
  "pagination": {
    "page": 2,
    "limit": 10,
    "total": 142,
    "totalPages": 15
  }
}

Idempotency

For POST requests that create resources, you can pass an Idempotency-Key header to safely retry requests without creating duplicates.

curl -X POST https://api.keepem.io/v1/events \
  -H "X-API-Key: sk_live_your_secret_key" \
  -H "Idempotency-Key: unique-request-id-123" \
  -H "Content-Type: application/json" \
  -d '{"name": "My Event"}'
  • Keys are valid for 24 hours
  • Repeating a request with the same key returns the original response
  • Use UUIDs or another unique identifier as the key value

Versioning

The API is versioned via the URL path (/v1). Non-breaking changes (new optional fields, new endpoints) may be added without a version bump. Breaking changes will be introduced in new versions.

Next steps