Skip to main content

Overview

InstaView uses scope-based permissions to provide granular access control. Each API key has a set of scopes that determine which operations it can perform on which resources.

Permission Model

Three-Level Access Control

Every resource type supports three permission levels:

Read

GET operations - List resources - View resource details - Search and filter

Write

POST and PATCH operations - Create resources - Update resources - Modify configurations

Delete

DELETE operations - Soft delete resources - Remove associations - Archive data

Scope Format

Scopes follow the format: <permission>:<resource>

Two names per scope

Conversation and contact scopes each answer to two names. InstaView’s API began in hiring, so its scopes were written in hiring nouns; agents now run sales, support and operations calls, where interview and candidate describe the wrong thing. They are the same permission. Holding either name satisfies a requirement for either, in both directions — a key with read:interviews reads /conversations, and a key with read:conversations reads /interviews.
There is nothing to migrate. Your existing key keeps the scopes it already has and keeps working, with no deadline attached. Keys created from now on are issued with the current names, and the dashboard offers only those. Every other scope family — jobs, agents, companies, billing, webhooks — is unchanged.
The tables below list the current name of each scope. Where a legacy alias exists it is named beside it, so you can recognise the scopes on a key you already have.

Available Scopes

Common Combinations:

Scope Validation

Request-Time Validation

Every API request validates the required scopes:

Validation Flow

1

Extract API Key

API key is extracted from Authorization: Bearer header
2

Validate Key

Key is validated (not revoked, not expired, not suspended)
3

Check Scopes

Request’s required scope is compared against key’s scopes
4

Company Isolation

Verify resource belongs to key’s company (if applicable)
5

Execute Request

If all checks pass, request is processed

Scope Strategy

By Use Case

Rationale: Dashboard only needs to view data, never modify it.

Least Privilege Principle

Always grant the minimum scopes needed:
  • Reduces Attack Surface: Compromised keys have limited damage potential
  • Prevents Accidents: Applications can’t accidentally delete data they shouldn’t
  • Audit Trail: Scope requirements make it clear what each integration does
  • Compliance: Many regulations require least-privilege access
A webhook handler that processes conversation completion events:Too many scopes:
Minimal scopes:
The webhook only needs to read conversations, not create or modify them.
A reporting tool that generates analytics:Includes write scopes:
Read-only:
Reporting tools should never have write or delete permissions.

Scope Dependencies

Some operations require multiple scopes due to resource relationships:

Creating a Contact

Required Scopes:
  • write:contacts - To create the contact
  • read:jobs - To validate the job exists and belongs to your company

Creating a Conversation

Required Scopes:
  • write:conversations - To create the conversation
  • read:contacts - To validate contact ownership
  • read:agents - To validate agent ownership

Listing Contacts with a Job Filter

Required Scopes:
  • read:contacts - To list contacts
  • read:jobs - To filter by job

Cross-Resource Operations

Inline Resources

Some operations allow creating inline resources:
Required Scopes:
  • write:conversations - Primary operation
  • write:contacts - To create the inline contact
  • read:agents - To validate agent
  • read:jobs - To validate job
Inline resources (contact, job, agent) are created as part of the parent operation and need the same scopes as creating them directly. The XOR rule means you send either an existing id or an inline definition, never both.

Company Isolation

All scopes are enforced within company boundaries:

Regular API Keys

ATS Integration Keys

Scope Errors

error
The API key lacks the required scope
Solution: Add the required scope to your API key or create a new key with appropriate scopes.
error
Resource doesn’t exist or belongs to another company
Causes:
  • Resource belongs to a different company
  • Resource has been soft-deleted
  • Invalid resource ID

Best Practices

Instead of one key with all scopes, create multiple keys for different purposes:
Document which scopes each part of your application needs:
Gracefully handle insufficient permission errors:
Periodically review API key scopes:
  • Are all scopes still necessary?
  • Can any keys be downgraded to read-only?
  • Are there unused keys that can be revoked?

Testing Scopes

Verify Your Scopes

Test Scope Requirements

Next Steps

API Keys

Learn about API key management

Rate Limiting

Understand rate limits per scope

Error Handling

Handle permission errors gracefully

Best Practices

Production integration patterns