The Paperlink API currently exposes endpoints for managing your team’s product catalog. All endpoints are under the base URLDocumentation Index
Fetch the complete documentation index at: https://developers.paperlink.online/llms.txt
Use this file to discover all available pages before exploring further.
https://app.paperlink.online/api/v1 and require a valid Bearer token in the Authorization header. The full machine-readable OpenAPI specification is available at app.paperlink.online/api/v1/openapi.json.
Read-only keys (scope
READ_ONLY) can only call GET endpoints. Attempting a POST, PATCH, or DELETE request with a Read-only key returns 403 scope_insufficient.Products
Products are the items in your team’s catalog that appear as line items on invoices and estimates. The products endpoints let you read and manage that catalog programmatically.List products
Retrieves a paginated list of products for your team.Filter by product status. Accepted values:
active, archived, all.Number of products to return. Minimum
1, maximum 100.Cursor for pagination. Pass the
nextCursor value from a previous response to fetch the next page.Array of product objects.
true if there are more pages to fetch. Pass data.nextCursor as the after parameter to retrieve the next page.Cursor to pass as
after in the next request. null when you have reached the last page.Get a product
Retrieves a single product by its ID.The UUID of the product to retrieve.
404 product_not_found if the product does not exist in your team’s catalog or does not match the key’s mode (Live vs. Test).
Create a product
Creates a new product in your team’s catalog.Idempotency-Key header to safely retry without creating duplicates.
Request body
Product name. Maximum 255 characters.
Unit price as a non-negative number. For example,
120.00.Three-letter ISO 4217 currency code. For example,
"USD", "EUR", "UAH".Optional description. Maximum 2000 characters.
Optional stock-keeping unit identifier. Must be unique within your team’s catalog. Maximum 100 characters.
Optional tax rate as a percentage between
0 and 100. For example, 20 for 20% VAT.Optional product classification. Accepted values:
GOODS, SERVICES.Optional unit of measure. Accepted values include
hr, day, pcs, ea, kg, m, m², service, project, license, seat, and many more. See the full list in the interactive API docs.Location header pointing to the new product: Location: /api/v1/products/{id}.
Returns 409 duplicate_sku if another active product in your catalog already uses the same SKU.
Update a product
Updates one or more fields on an existing product. Only the fields you include in the request body are changed — omitted fields keep their current values.Idempotency-Key header.
Path parameters
The UUID of the product to update.
New product name. Maximum 255 characters.
New unit price as a non-negative number.
New three-letter ISO 4217 currency code.
New description. Pass
null to clear the existing description.New SKU. Pass
null to clear the existing SKU. Must be unique within the catalog if provided.New tax rate (0-100). Pass
null to clear the existing tax rate.New product type. Accepted values:
GOODS, SERVICES.New unit of measure.
200 with the updated product object, 404 product_not_found if the product does not exist, or 409 duplicate_sku on a SKU conflict.
Archive a product
Archives a product, removing it from the active catalog. Archived products are retained for historical records on existing invoices but no longer appear when creating new documents.The UUID of the product to archive.
204 No Content on success. Returns 404 product_not_found if the product does not exist, or 409 already_archived if the product has already been archived.
Archiving a product does not delete it. Archived products remain visible when you filter by
status=archived or status=all. This preserves the integrity of existing invoices that reference the product.Error responses
All errors follow a consistent structure:High-level error category:
authentication_error, permission_error, not_found_error, validation_error, conflict_error, rate_limit_error, or server_error.Machine-readable error code such as
invalid_token, scope_insufficient, product_not_found, duplicate_sku, or rate_limit_exceeded.Human-readable description of the error.
Present on
validation_error responses. Each entry describes one validation failure, including the field path and the constraint that was violated.Unique identifier for this request. Include this ID when contacting support so the request can be traced in server logs.
Idempotency
Write endpoints (POST and PATCH) accept an optionalIdempotency-Key header. If you send the same key and request body more than once, the API returns the original response from the first successful request rather than executing the operation again. Use this to safely retry requests after a network failure without creating duplicate records.
Where to go next
API overview
Understand modes, scopes, and rate limits
Authenticate with the API
Create an API key and learn how to use Bearer token auth
Clients and products
Manage your product catalog inside Paperlink
Integrations
Connect Paperlink with Slack, AI assistants, and your own tools