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, whereinterview 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.Available Scopes
- Jobs
- Contacts
- Conversations
- Runs
- Agents
- Companies
- Billing
- Webhooks
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 header2
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
- Analytics Dashboard
- Contact Sync
- Conversation Automation
- Primary Integration
- Webhook Handler
Least Privilege Principle
Always grant the minimum scopes needed:Why Least Privilege?
Why Least Privilege?
- 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
Example: Webhook Handler
Example: Webhook Handler
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.
Example: Reporting Tool
Example: Reporting Tool
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
write:contacts- To create the contactread:jobs- To validate the job exists and belongs to your company
Creating a Conversation
write:conversations- To create the conversationread:contacts- To validate contact ownershipread:agents- To validate agent ownership
Listing Contacts with a Job Filter
read:contacts- To list contactsread:jobs- To filter by job
Cross-Resource Operations
Inline Resources
Some operations allow creating inline resources:write:conversations- Primary operationwrite:contacts- To create the inline contactread:agents- To validate agentread: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 scopeSolution: 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 companyCauses:
- Resource belongs to a different company
- Resource has been soft-deleted
- Invalid resource ID
Best Practices
Create Purpose-Specific Keys
Create Purpose-Specific Keys
Instead of one key with all scopes, create multiple keys for different purposes:
Document Required Scopes
Document Required Scopes
Document which scopes each part of your application needs:
Handle Permission Errors
Handle Permission Errors
Gracefully handle insufficient permission errors:
Regular Scope Audits
Regular Scope Audits
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