Coram Ai Credentials API
View user credentials and assign or remove cards.
View user credentials and assign or remove cards.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/coram-ai:coram-ai-credentials-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Coram Credentials API
description: '# Introduction
The Coram API enables seamless programmatic access to your security camera infrastructure, allowing you to build custom integrations and automate workflows. # Supported Actions
Manage and interact with your Coram platform resources:
| Resource | Description |
| -------- | ----------- |
| **Camera Groups** | Organize and configure camera collections |
| **Cameras** | Access camera settings, streams, and metadata |
| **Locations** | Manage physical site configurations |
| **NVRs** | Control and monitor network video recorders |
| **Access Control** | Manage doors, cards, and permissions |
## Access Control
Card and permission changes are saved before they reach controllers. If a request fails, check the saved state before retrying. # Required Headers
Every API request must include the following headers:
| Header | Required | Description |
| ------ | -------- | ----------- |
| `X-Auth-Token` | Yes | Your API key (from the API key List Page) |
**Example:**
```
curl -X GET "https://api.coram.ai/developer-api/v1/cameras" \
-H "X-Auth-Token: xxxxxxxxxxxxxxx"
```
# Response Format
All API responses follow a consistent structure based on the operation result. ## Success Response
**List Operations** (e.g., `GET /v1/cameras`)
Returns a `results` array with pagination support:
```json
{
"results": [
{ "id": "cam_001", "name": "Front Door", ... },
{ "id": "cam_002", "name": "Lobby", ... }
],
"has_more": true
}
```
When `has_more` is `true`, additional results are available. Use pagination parameters to fetch more. **Bulk/Batch Operations** (e.g., `POST /v1/cameras`, `PATCH /v1/cameras`)
Returns a top-level `status` field indicating whether the API request was processed, and a `results` array where each item reflects the outcome of an individual operation:
```json
{
"status": "success",
"results": [
{ "status": "success", "data": { "id": "cam_001", "mac_address": "..." } },
{ "status": "error", "error": { "code": "VALIDATION_ERROR", "message": "..." } }
]
}
```
| Field | Description |
| ----- | ----------- |
| `status` (top-level) | `"success"` if the request was processed |
| `results[].status` | `"success"` or `"error"` for each operation |
| `results[].data` | Present when `status` is `"success"` |
| `results[].error` | Present when `status` is `"error"` |
## Error Response
When an error occurs, the response includes `status` set to `"error"` along with detailed error information:
```json
{
"status": "error",
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid MAC address format",
"field": "mac_address"
}
}
```
**Error Fields:**
| Field | Type | Description |
| ----- | ---- | ----------- |
| `code` | string | Machine-readable error code |
| `message` | string | Human-readable error description |
| `field` | string | The field that caused the error (if applicable) |
# HTTP Status Codes
The API uses standard HTTP status codes to indicate the success or failure of requests:
## Success Codes
| Code | Description |
| ---- | ----------- |
| `200 OK` | Request succeeded |
| `201 Created` | Resource successfully created |
| `204 No Content` | Request succeeded with no response body |
## Client Error Codes
| Code | Description |
| ---- | ----------- |
| `400 Bad Request` | Invalid request syntax or parameters |
| `401 Unauthorized` | Missing or invalid API key |
| `403 Forbidden` | Valid API key but insufficient permissions |
| `404 Not Found` | Requested resource does not exist |
| `422 Unprocessable Entity` | Validation error in request body |
| `429 Too Many Requests` | Rate limit exceeded |
## Server Error Codes
| Code | Description |
| ---- | ----------- |
| `500 Internal Server Error` | Unexpected server error (rare) |
| `502 Bad Gateway` | Upstream service unavailable |
| `503 Service Unavailable` | Service temporarily unavailable |
# Error Handling Best Practices
1. **Always check the `status` field** — Verify if the response indicates `"success"` or `"error"`
2.'
version: 1.0.0
servers:
- url: https://developer.coram.ai
description: Production
security:
- X-Auth-Token: []
tags:
- name: Credentials
description: View user credentials and assign or remove cards.
paths:
/v1/access-control/credentials:
get:
operationId: list_access_control_credentials
summary: List credentials
description: List user credentials in your organization. `card_id` and `pin` are `null` when unassigned.
tags:
- Credentials
security:
- X-Auth-Token: []
parameters:
- in: query
name: page
required: false
schema:
type: integer
minimum: 1
default: 1
- in: query
name: limit
required: false
schema:
type: integer
minimum: 1
maximum: 100
default: 100
responses:
'200':
description: User credentials in the organization
content:
application/json:
schema:
$ref: '#/components/schemas/CredentialList'
'400':
description: Invalid page or limit value
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'403':
description: API key lacks read scope or an Access Control admin creator role
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'500':
description: Server error
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
x-public-api: true
x-public-api-version: v1
/v1/access-control/credentials/{id}/card:
put:
operationId: assign_access_control_credential_card
summary: Assign a card
description: Assign or replace a user's card. A card can belong to only one user.
tags:
- Credentials
security:
- X-Auth-Token: []
parameters:
- in: path
name: id
required: true
schema:
type: integer
format: int64
minimum: 1
description: Existing Coram user ID.
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- card_id
properties:
card_id:
type: integer
format: int64
minimum: 1
description: Physical card identifier.
example:
card_id: 123456
responses:
'200':
description: The resulting user credential
content:
application/json:
schema:
$ref: '#/components/schemas/Credential'
'400':
description: Invalid user ID, card ID, or JSON body
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'403':
description: API key lacks write scope or an Access Control admin creator role
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'404':
description: User is not an existing Access Control member in this organization
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'409':
description: The card is already active for another user
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'500':
description: Server error
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
x-public-api: true
x-public-api-version: v1
delete:
operationId: remove_access_control_credential_card
summary: Remove a card
description: Remove a user's card. Their account and permissions remain unchanged.
tags:
- Credentials
security:
- X-Auth-Token: []
parameters:
- in: path
name: id
required: true
schema:
type: integer
format: int64
minimum: 1
description: Existing Coram user ID.
responses:
'204':
description: Card removed, or no active card existed
'400':
description: Invalid user ID
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'403':
description: API key lacks write scope or an Access Control admin creator role
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'404':
description: User is not an existing Access Control member in this organization
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'500':
description: Server error
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
x-public-api: true
x-public-api-version: v1
/v1/access-control/credentials/{id}/pin:
put:
operationId: assign_access_control_credential_pin
summary: Assign a PIN
description: Assign or replace a user's PIN. A PIN can belong to only one user in the organization.
tags:
- Credentials
security:
- X-Auth-Token: []
parameters:
- in: path
name: id
required: true
schema:
type: integer
format: int64
minimum: 1
description: Existing Coram user ID.
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- pin
properties:
pin:
type: string
pattern: ^[0-9]{4,8}$
description: Four to eight ASCII digits.
example:
pin: '0012'
responses:
'200':
description: The resulting user credential
content:
application/json:
schema:
$ref: '#/components/schemas/Credential'
'400':
description: Invalid user ID, PIN, or JSON body
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'403':
description: API key lacks write scope or an Access Control admin creator role
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'404':
description: User is not an existing Access Control member in this organization
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'409':
description: The PIN is already active for another user
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'500':
description: Server error
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
x-public-api: true
x-public-api-version: v1
delete:
operationId: remove_access_control_credential_pin
summary: Remove a PIN
description: Remove a user's PIN. Their account, card, and permissions remain unchanged.
tags:
- Credentials
security:
- X-Auth-Token: []
parameters:
- in: path
name: id
required: true
schema:
type: integer
format: int64
minimum: 1
description: Existing Coram user ID.
responses:
'204':
description: PIN removed, or no active PIN existed
'400':
description: Invalid user ID
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'403':
description: API key lacks write scope or an Access Control admin creator role
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'404':
description: User is not an existing Access Control member in this organization
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
'500':
description: Server error
content:
application/json:
schema:
$ref: '#/components/schemas/AuthErrorResponse'
x-public-api: true
x-public-api-version: v1
components:
schemas:
AuthErrorResponse:
type: object
required:
- detail
properties:
detail:
type: string
description: 'Human-readable error description. Matches the shape FastAPI uses
for `HTTPException` responses, so existing code that parses the
Python developer-api''s auth errors works unchanged.
'
Credential:
type: object
required:
- id
- name
- email
- card_id
- pin
properties:
id:
type: integer
format: int64
description: Stable Coram user identifier. Store this with your external user mapping.
name:
type: string
email:
type: string
card_id:
type:
- integer
- 'null'
format: int64
minimum: 1
description: Active physical card identifier, or null when unassigned.
pin:
type:
- string
- 'null'
pattern: ^[0-9]{4,8}$
description: Active PIN, or null when unassigned.
x-public-api-group: credentials
CredentialList:
type: object
required:
- results
- has_more
properties:
results:
type: array
items:
$ref: '#/components/schemas/Credential'
has_more:
type: boolean
x-public-api-group: credentials
securitySchemes:
X-Auth-Token:
type: apiKey
in: header
name: X-Auth-Token
x-tagGroups:
- name: Surveillance
tags:
- cameras
- camera-groups
- locations
- nvrs
- alerts
- name: Access Control
tags:
- doors
- credentials
- events
- permissions
- name: Emergency Management System
tags:
- reunification
x-provenance:
method: harvested
publisher: Coram Ai
source: https://developer.coram.ai/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)