Every request to the Propal API must include an API key in theDocumentation Index
Fetch the complete documentation index at: https://docs.propal.io/llms.txt
Use this file to discover all available pages before exploring further.
Authorization header.
Creating API keys
You can create API keys from your Propal dashboard:- Navigate to Settings > API Keys
- Click Create API Key
- Enter a name (e.g., “Zapier Integration”, “Internal Dashboard”)
- Select the scopes (permissions) the key should have
- Click Create Key
Key format
API keys follow the format:pp_live_— fixed prefix, identifies this as a Propal API key- The rest is a cryptographically random string
Scopes
Each API key has a set of scopes that define what it can access. Scopes follow the format{resource}:{action}.
Available scopes
| Resource | Read | Write | Delete |
|---|---|---|---|
| Proposals | proposals:read | proposals:write | proposals:delete |
| Leads | leads:read | leads:write | leads:delete |
| Catalog | products:read | products:write | products:delete |
| Templates | templates:read | templates:write | templates:delete |
| Themes | themes:read | themes:write | themes:delete |
| Media | media:read | media:write | media:delete |
| Metrics | metrics:read | — | — |
| Organization | organization:read | — | — |
Scope combinations by use case
CRM Integration (read-only)
CRM Integration (read-only)
Full Automation
Full Automation
Analytics Dashboard
Analytics Dashboard
Full Access
Full Access
All scopes selected. Use this only for trusted internal tools.
Security best practices
Use minimal scopes
Only grant the scopes your integration actually needs. A read-only dashboard doesn’t need
write or delete permissions.Never expose keys in client-side code
API keys should only be used in server-side code, backend services, or CI/CD pipelines. Never include them in JavaScript bundles, mobile apps, or public repositories.
Use environment variables
Store keys in environment variables or a secrets manager — never hardcode them.
Error responses
If authentication fails, you’ll receive a401 Unauthorized response:
403 Forbidden: