# API v1 Reference

URL: /en/docs/api/v1
Last Updated: 2026-07-30T21:15:44.902Z

## Description
Complete REST API reference for Trust Center Admin API v1 with interactive examples and comprehensive endpoint documentation

## Available Actions
- Navigate to related topics
- View step-by-step instructions
- Get best practices

## Content
import { Key, Code, Webhook, Terminal } from "lucide-react";

# API v1 Reference

The Trust Center Admin API v1 provides complete programmatic access to manage customer accounts, documents, certifications, access requests, and white-label trust center configurations. Built with REST principles and designed for enterprise-scale integrations.

## Quick Start

### Authentication

The Admin Center API uses API keys for programmatic access. Browser login is available only through the Admin Center UI and does not issue API bearer tokens.

Create an API key from **Admin Center → Integrations → API Keys**, store it securely, and pass it as a bearer API key:

**API Key Benefits:**

* Long-lasting authentication (up to 365 days)
* Role-based permissions (admin, account\_manager, content\_manager, viewer)
* Perfect for server-to-server integrations
* One-time key display for enhanced security

**Authorization header format:**

```bash
Authorization: Bearer $TRUST_CENTER_API_KEY
```

### Base URL

All API endpoints are relative to the admin center domain:

```
https://app.orbiqhq.com/api/v1/
```

### Your First Request

Test your authentication by listing customer accounts:

```bash tab="cURL"
curl -H "Authorization: Bearer $TRUST_CENTER_API_KEY" \
  -H "Content-Type: application/json" \
  https://app.orbiqhq.com/api/v1/accounts
```

```javascript tab="Fetch"
const response = await fetch("https://app.orbiqhq.com/api/v1/accounts", {
  headers: {
    Authorization: "Bearer " + apiKey,
    "Content-Type": "application/json",
  },
});

const { accounts } = await response.json();
console.log(`Managing ${accounts.length} customer accounts`);
```

```python tab="Python"
import requests

headers = {
    "Authorization": f"Bearer {api_key}",
    "Content-Type": "application/json"
}

response = requests.get(
    "https://app.orbiqhq.com/api/v1/accounts",
    headers=headers
)

accounts = response.json()["accounts"]
print(f"Managing {len(accounts)} customer accounts")
```

## Core Resources

### Accounts Management

Manage customer organizations and their compliance journey:

* [`GET /accounts`](/en/docs/api/v1/accounts/get) - List all customer accounts
* [`POST /accounts`](/en/docs/api/v1/accounts/post) - Create new customer account
* [`GET /accounts/{id}`](/en/docs/api/v1/accounts/id/get) - Get account details
* [`PATCH /accounts/{id}`](/en/docs/api/v1/accounts/id/patch) - Update account information
* [`DELETE /accounts/{id}`](/en/docs/api/v1/accounts/id/delete) - Delete account
* [`GET /accounts/{id}/documents`](/en/docs/api/v1/accounts/id/documents/get) - Get account documents
* [`PATCH /accounts/{id}/documents`](/en/docs/api/v1/accounts/id/documents/patch) - Update document access

### Document Management

Control compliance documents and access permissions:

* [`GET /documents`](/en/docs/api/v1/documents/get) - List documents
* [`POST /documents`](/en/docs/api/v1/documents/post) - Create document metadata
* [`GET /documents/{id}`](/en/docs/api/v1/documents/id/get) - Get document details
* [`PATCH /documents/{id}`](/en/docs/api/v1/documents/id/patch) - Update document
* [`PUT /documents/{id}/file`](/en/docs/api/v1/documents/id/file/put) - Upload document file
* [`GET /documents/templates`](/en/docs/api/v1/documents/templates/get) - List document templates

### User Management

Handle admin user invitations, roles, and preferences:

* [`GET /users`](/en/docs/api/v1/users/get) - List tenant users
* [`POST /users`](/en/docs/api/v1/users/post) - Invite new user
* [`GET /users/{id}`](/en/docs/api/v1/users/id/get) - Get user profile
* [`PATCH /users/{id}`](/en/docs/api/v1/users/id/patch) - Update user profile
* [`DELETE /users/{id}`](/en/docs/api/v1/users/id/delete) - Delete user
* [`POST /users/{id}/invite`](/en/docs/api/v1/users/id/invite/post) - Re-send invitation email for an existing user

### Certifications

Manage compliance certificates with validity tracking:

* [`GET /certifications`](/en/docs/api/v1/certifications/get) - List certifications
* [`POST /certifications`](/en/docs/api/v1/certifications/post) - Create certification
* [`GET /certifications/{id}`](/en/docs/api/v1/certifications/id/get) - Get certification details
* [`PATCH /certifications/{id}`](/en/docs/api/v1/certifications/id/patch) - Update certification
* [`DELETE /certifications/{id}`](/en/docs/api/v1/certifications/id/delete) - Delete certification
* [`PUT /certifications/{id}/{filetype}`](/en/docs/api/v1/certifications/id/filetype/put) - Upload certificate files
* [`GET /certifications/templates`](/en/docs/api/v1/certifications/templates/get) - List certification templates

## Workflow Automation

### Access Request Management

Handle trust center visitor requests and approval workflows:

* [`GET /access-requests`](/en/docs/api/v1/access-requests/get) - List access requests with filtering
* [`PATCH /access-requests/{id}`](/en/docs/api/v1/access-requests/id/patch) - Update request status (triggers emails)

### Knowledge Base Management

Manage Q\&A content for customer self-service:

* [`GET /knowledge-base`](/en/docs/api/v1/knowledge-base/get) - List Q\&A items
* [`POST /knowledge-base`](/en/docs/api/v1/knowledge-base/post) - Create Q\&A item
* [`GET /knowledge-base/{id}`](/en/docs/api/v1/knowledge-base/id/get) - Get Q\&A item details
* [`PATCH /knowledge-base/{id}`](/en/docs/api/v1/knowledge-base/id/patch) - Update Q\&A item
* [`DELETE /knowledge-base/{id}`](/en/docs/api/v1/knowledge-base/id/delete) - Delete Q\&A item

### Updates

Create Trust Center update timelines, follow-up threads, classifications, templates, and delivery workflows:

* [`GET /updates`](/en/docs/api/v1/updates/get) - List updates
* [`POST /updates`](/en/docs/api/v1/updates/post) - Create a draft update
* [`GET /updates/options`](/en/docs/api/v1/updates/options/get) - Load update creation options and follow-up defaults
* [`GET /updates/{id}`](/en/docs/api/v1/updates/id/get) - Get update detail, audience, follow-ups, and delivery results
* [`PATCH /updates/{id}`](/en/docs/api/v1/updates/id/patch) - Edit update content, audience, resources, slug, or access level
* [`DELETE /updates/{id}`](/en/docs/api/v1/updates/id/delete) - Delete an update that has no sent email delivery
* [`POST /updates/{id}/publish`](/en/docs/api/v1/updates/id/publish/post) - Create a draft update
* [`POST /updates/{id}/schedule`](/en/docs/api/v1/updates/id/schedule/post) - Schedule a draft or scheduled update
* [`POST /updates/{id}/archive`](/en/docs/api/v1/updates/id/archive/post) - Archive a published update
* [`POST /updates/{id}/revert-to-draft`](/en/docs/api/v1/updates/id/revert-to-draft/post) - Return an eligible update to draft
* [`POST /updates/{id}/send-now`](/en/docs/api/v1/updates/id/send-now/post) - Queue delivery for a published update
* [`POST /updates/{id}/test`](/en/docs/api/v1/updates/id/test/post) - Send a test update email
* [`POST /updates/classifications`](/en/docs/api/v1/updates/classifications/post) - Create an update classification
* [`PATCH /updates/classifications/{id}`](/en/docs/api/v1/updates/classifications/id/patch) - Update an update classification
* [`GET /updates/templates`](/en/docs/api/v1/updates/templates/get) - List update templates
* [`POST /updates/templates`](/en/docs/api/v1/updates/templates/post) - Create an update template
* [`GET /updates/templates/{id}`](/en/docs/api/v1/updates/templates/id/get) - Get an update template
* [`PATCH /updates/templates/{id}`](/en/docs/api/v1/updates/templates/id/patch) - Update a tenant-owned update template

### Ask Assistant API

Generate AI-assisted answers for questionnaire and compliance prompts:

* [`POST /ask`](/en/docs/api/v1/ask/post) - Create an ask request and return terminal or in-progress status
* [`GET /ask/{id}`](/en/docs/api/v1/ask/id/get) - Retrieve ask response status and output by ID

### NDA Template Management

Manage Non-Disclosure Agreement templates with version control:

* [`GET /nda-templates`](/en/docs/api/v1/nda-templates/get) - List NDA templates
* [`POST /nda-templates`](/en/docs/api/v1/nda-templates/post) - Create NDA template
* [`GET /nda-templates/{id}`](/en/docs/api/v1/nda-templates/id/get) - Get template details with versions
* [`PATCH /nda-templates/{id}`](/en/docs/api/v1/nda-templates/id/patch) - Update template
* [`DELETE /nda-templates/{id}`](/en/docs/api/v1/nda-templates/id/delete) - Delete template
* [`POST /nda-templates/{id}/versions`](/en/docs/api/v1/nda-templates/id/versions/post) - Create new version
* [`PATCH /nda-templates/{id}/versions/{versionId}`](/en/docs/api/v1/nda-templates/id/versions/versionid/patch) - Update version status
* [`POST /nda-templates/{id}/versions/{versionId}/activate`](/en/docs/api/v1/nda-templates/id/versions/versionid/activate/post) - Activate version

### NDA Acceptance Management

Track and manage NDA acceptances:

* [`GET /nda-acceptances`](/en/docs/api/v1/nda-acceptances/get) - List NDA acceptances
* [`GET /nda-acceptances/{id}`](/en/docs/api/v1/nda-acceptances/id/get) - Get acceptance details
* [`GET /nda-acceptances/{id}/file`](/en/docs/api/v1/nda-acceptances/id/file/get) - Download signed NDA file
* [`GET /accounts/{id}/nda-acceptances`](/en/docs/api/v1/accounts/id/nda-acceptances/get) - Get account NDA acceptances

## Configuration & Branding

### Brand Management

Configure white-label themes and trust center appearance:

* [`GET /brand`](/en/docs/api/v1/brand/get) - Get current brand settings
* [`PATCH /brand`](/en/docs/api/v1/brand/patch) - Update brand configuration
* [`PUT /brand/logo`](/en/docs/api/v1/brand/logo/put) - Upload custom logo
* [`DELETE /brand/logo`](/en/docs/api/v1/brand/logo/delete) - Remove custom logo

### Tabs

Manage Trust Center navigation order and visibility:

* [`GET /tabs`](/en/docs/api/v1/tabs/get) - List system and custom tab rows in navigation order
* [`PATCH /tabs/{id}`](/en/docs/api/v1/tabs/id/patch) - Update a tab row's order or enabled state

### API Keys Management

Generate programmatic access credentials:

* [`GET /integrations/api-keys`](/en/docs/api/v1/integrations/api-keys/get) - List API keys
* [`POST /integrations/api-keys`](/en/docs/api/v1/integrations/api-keys/post) - Create new API key

## Authentication Endpoints

* [`POST /logout`](/en/docs/api/v1/logout/post) - End the current browser session

## Response Format

All API responses follow a consistent structure:

### Success Response (Single Resource)

```json
{
  "success": true,
  "data": {
    "account": {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "title": "Acme Corp",
      "review_status": "completed"
    }
  }
}
```

### Collection Response

```json
{
  "accounts": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "title": "Acme Corp",
      "review_status": "completed"
    }
  ]
}
```

### Error Response

```json
{
  "error": {
    "type": "validation_error",
    "message": "The email address provided is not valid",
    "param": "email"
  }
}
```

## HTTP Status Codes

| Code  | Meaning              | Description                                         |
| ----- | -------------------- | --------------------------------------------------- |
| `200` | OK                   | Request successful                                  |
| `201` | Created              | Resource created successfully                       |
| `204` | No Content           | Successful deletion or update with no response body |
| `400` | Bad Request          | Invalid request parameters                          |
| `401` | Unauthorized         | Authentication required                             |
| `403` | Forbidden            | Insufficient permissions                            |
| `404` | Not Found            | Resource not found                                  |
| `409` | Conflict             | Resource conflict (e.g., duplicate email)           |
| `422` | Unprocessable Entity | Valid syntax but semantic errors                    |
| `429` | Too Many Requests    | Rate limit exceeded                                 |
| `500` | Server Error         | Server error                                        |

## Pagination

List endpoints support cursor-based pagination:

```bash
# Get first page
curl -H "Authorization: Bearer $TRUST_CENTER_API_KEY" \
  "https://app.orbiqhq.com/api/v1/accounts?limit=50"

# Get next page using cursor
curl -H "Authorization: Bearer $TRUST_CENTER_API_KEY" \
  "https://app.orbiqhq.com/api/v1/accounts?limit=50&starting_after=acc_123"
```

**Query Parameters:**

* `limit` - Number of items to return (max 100, default 20)
* `starting_after` - Cursor for pagination
* `ending_before` - Reverse pagination cursor

## Rate Limiting

* **Limit**: 1000 requests per minute per API key
* **Headers**: Rate limit info included in response headers
* **429 Response**: Includes `Retry-After` header with seconds to wait

```bash
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1640995200
```

## Common Integration Patterns

### Error Handling

```javascript
async function createAccount(accountData) {
  try {
    const response = await fetch("https://app.orbiqhq.com/api/v1/accounts", {
      method: "POST",
      headers: {
        Authorization: "Bearer " + apiKey,
        "Content-Type": "application/json",
      },
      body: JSON.stringify(accountData),
    });

    if (!response.ok) {
      const error = await response.json();
      throw new Error(`API Error: ${error.error.message}`);
    }

    return await response.json();
  } catch (error) {
    console.error("Failed to create account:", error.message);
    throw error;
  }
}
```

### Document Upload Workflow

```bash
# 1. Create document metadata
RESPONSE=$(curl -X POST "https://app.orbiqhq.com/api/v1/documents" \
  -H "Authorization: Bearer $TRUST_CENTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Privacy Policy",
    "access_level": "public",
    "featured": true
  }')

DOCUMENT_ID=$(echo $RESPONSE | jq -r '.data.document.id')

# 2. Upload file
curl -X PUT "https://app.orbiqhq.com/api/v1/documents/$DOCUMENT_ID/file" \
  -H "Authorization: Bearer $TRUST_CENTER_API_KEY" \
  -H "Content-Type: application/pdf" \
  --data-binary @privacy-policy.pdf
```

### Access Request Approval Automation

```python
import requests

api_key = "YOUR_TRUST_CENTER_API_KEY"

def approve_pending_requests():
    # Get all pending requests
    response = requests.get(
        "https://app.orbiqhq.com/api/v1/access-requests",
        params={"review_status": "to_review"},
        headers={"Authorization": f"Bearer {api_key}"}
    )

    pending_requests = response.json()["contacts"]

    # Auto-approve requests from verified domains
    for request in pending_requests:
        if request["email"].endswith("@trustedcompany.com"):
            requests.patch(
                f"https://app.orbiqhq.com/api/v1/access-requests/{request['id']}",
                json={"review_status": "approved"},
                headers={"Authorization": f"Bearer {api_key}"}
            )
            print(f"Auto-approved: {request['email']}")
```

### White-Label Configuration

```bash
# Update trust center branding
curl -X PATCH "https://app.orbiqhq.com/api/v1/brand" \
  -H "Authorization: Bearer $TRUST_CENTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Acme Trust Center",
    "primary_color": "#0066cc",
    "deployment_domains": "trust.acme.com",
    "footer_text": "© 2025 Acme. All rights reserved."
  }'

# Upload custom logo
curl -X PUT "https://app.orbiqhq.com/api/v1/brand/logo" \
  -H "Authorization: Bearer $TRUST_CENTER_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F "file=@/path/to/company-logo.png"
```

## Development Tools

### Testing Your Integration

Use these endpoints to verify your setup:

```bash
# Health check
curl -H "Authorization: Bearer $TRUST_CENTER_API_KEY" \
  https://app.orbiqhq.com/api/v1/accounts

# Test document upload
curl -X POST "https://app.orbiqhq.com/api/v1/documents" \
  -H "Authorization: Bearer $TRUST_CENTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title": "Test Document", "access_level": "public"}'
```

### Webhook Integration

Set up webhooks to receive real-time notifications:

* Account status changes
* Document uploads and approvals
* Access request submissions
* Certification expiry alerts

### Bulk Operations

For large-scale operations, use filtering and pagination:

```bash
# Process all accounts needing review
curl -H "Authorization: Bearer $TRUST_CENTER_API_KEY" \
  "https://app.orbiqhq.com/api/v1/accounts?status=in_review&limit=100"

# Bulk approve access requests
curl -H "Authorization: Bearer $TRUST_CENTER_API_KEY" \
  "https://app.orbiqhq.com/api/v1/access-requests?review_status=to_review&account_id=acc_123"
```

***

## Next Steps

<Cards>
  <Card title="Authentication Deep Dive" href="/en/docs/api/v1" icon={<Key />}>
    Learn about API keys, session management, and security best practices
  </Card>

  <Card title="Webhook Integration" href="/en/docs/user-guide/integrations/api-overview" icon={<Webhook />}>
    Set up real-time notifications for account and document events
  </Card>

  <Card title="Integration Examples" href="/en/docs/api/v1" icon={<Code />}>
    Explore sample implementations and integration patterns
  </Card>

  <Card title="Postman Collection" href="/en/docs/api/v1" icon={<Terminal />}>
    Download our Postman collection for easy API testing
  </Card>
</Cards>

Ready to dive deeper? Browse the complete endpoint documentation above or start with [account management](/en/docs/api/v1/accounts/get) to get familiar with the API patterns.


## Code Examples Found
- bash: Authorization: Bearer $TRUST_CENTER_API_KEY...
- bash: curl -H "Authorization: Bearer $TRUST_CENTER_API_KEY" \
  -H "Content-Type: application/json" \
  ht...
- javascript: const response = await fetch("https://app.orbiqhq.com/api/v1/accounts", {
  headers: {
    Authoriza...
- python: import requests

headers = {
    "Authorization": f"Bearer {api_key}",
    "Content-Type": "applicat...
- json: {
  "success": true,
  "data": {
    "account": {
      "id": "550e8400-e29b-41d4-a716-446655440000"...
- json: {
  "accounts": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "title": "Acme Cor...
- json: {
  "error": {
    "type": "validation_error",
    "message": "The email address provided is not val...
- bash: # Get first page
curl -H "Authorization: Bearer $TRUST_CENTER_API_KEY" \
  "https://app.orbiqhq.com/...
- bash: X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1640995200...
- javascript: async function createAccount(accountData) {
  try {
    const response = await fetch("https://app.or...
- bash: # 1. Create document metadata
RESPONSE=$(curl -X POST "https://app.orbiqhq.com/api/v1/documents" \
 ...
- python: import requests

api_key = "YOUR_TRUST_CENTER_API_KEY"

def approve_pending_requests():
    # Get al...
- bash: # Update trust center branding
curl -X PATCH "https://app.orbiqhq.com/api/v1/brand" \
  -H "Authoriz...
- bash: # Health check
curl -H "Authorization: Bearer $TRUST_CENTER_API_KEY" \
  https://app.orbiqhq.com/api...
- bash: # Process all accounts needing review
curl -H "Authorization: Bearer $TRUST_CENTER_API_KEY" \
  "htt...