Documentation
API
Introduction
The CCA Document Warehouse was created to serve as an adapter between stores and the SignaSur™ document management system. It is responsible for issuing invoices, tracking enrolments, and interfacing with SignaSur™ records.
For your convenience, a demo environment of the CCA Document Warehouse exists at warehousedemo.cca-acc.com which can be used to test interactions with the various API endpoints outlined here.
Before you can begin testing API calls, an outlet will need to be created for you within the Warehouse demo environment. Please contact [email protected] with your desired outlet domain name (e.g. youroutletdomain.com) to have one created for you. You will then be provided with an outlet access token which is required to make calls to the API.

Authentication
When making any calls to the API you must provide an outlet to authenticate with. All requests to all endpoints should use the POST method and contain a JSON body containing the outlet domain and access token. Here is an example API call using a cURL command:
curl --request POST --url https://warehouse.cca-acc.com/api/v1/endpoint --header 'Content-Type: application/json' --data '{"outlet": {}'"access_token": "your_access_token_here",}
"domain": "youroutletdomain.com"
Implementation Overview
Populating Products
The first step in interfacing with the Document Warehouse (after validating your credentials) is to create products based on the SKUs provided by the API. You can use the SKUs endpoint (see more details below) to get all active SKUs:
https://warehouse.cca-acc.com/api/v1/skus?status=1
Based on this data, you can create products in your ecommerce platform for each SKU. Each SKU contains a product name, short and long descriptions, and representative image URL. In addition, it will indicate if it provides user access to SignaSur™ or requires prior access via another purchase. Finally, outlet prices will be provided in cents (e.g. a value of 100 means $1.00). Depending on your ecommerce platform, you may need to reformat the price value provided by the API (in cents) to dollars and cents when importing products. You can feel free to mark up prices as needed in your ecommerce platform, but the price provided by the API is what the outlet will be charged by SignaSur™ when a customer purchases the product.
If your ecommerce platform provides categorization options, is is recommended that you create a "SignaSur" category and assign all of these products to it. You can then use the presence of this category on a product to determine if any additional logic should apply to its purchase (e.g. member-specific pricing).
Purchasing Rules
During the checkout flow, you may consider implementing some additional rules to prevent errors from the API:
- You can use the Company Lookup endpoint to find matches for an entered company name. It is recommended to create an interactive input (e.g. autocomplete) to help customers identify the company they belong to. By obtaining the ID associated with the company name and providing it as the company_id when making a Create Transaction request, you will prevent duplicate companies from being createdin SignaSur™.
- You can use the Verify Enrolment endpoint to check if a customer should be allowed to purchase SKUs that require access when there are no products providing access in the cart (e.g. a user who bought an enrolment six months ago and is buying additional contracts today is allowed, but a user who does not have an enrolment is not allowed to buy contracts on their own). In the case that a customer attempts to purchase without a pre-existing enrolment, you can suggest that they add a product providing access to their cart as well.
Sending a Transaction
Once the payment on your ecommerce platform is processed, send the information (customer details, cart line items) to the warehouse using the Create Transaction endpoint. The document outlet will then be charged for the sale, and the customer's purchase data will be passed along to SignaSur™, triggering an account creation for new users, or document credit adjustments for existing users.
Validate
The validate endpoint returns information regarding whether or not the provided access token and domain match an outlet in the warehouse.
Endpoint
https://warehouse.cca-acc.com/api/v1/validate
Returns
{"message": "Outlet is valid.",}
"outletId": 1
Outlet Info
The outlet endpoint returns details related to your outlet. This endpoint does not accept any query parameters as it returns your own outlet information exclusively.
Endpoint
https://warehouse.cca-acc.com/api/v1/outlet-info
Returns
{"id": 1,}
"short_name": "Outlet short name",
"full_name": "Outlet full name",
"domain": "youroutletdomain.com",
"store_url": "https://youroutletdomain.com/store/",
"color_primary": "#000000",
"color_secondary": "#ffffff",
"logo_url": "/api/v1/outlets/logo/yourlogo.png"
SKUs
The SKUs endpoint provides a method of retrieving official and up to date SignaSur™ SKUs with which you can populate your store.
Endpoint
https://warehouse.cca-acc.com/api/v1/skus
Returns
{"skus": [}{]"id": 1,}, ...
"status": 0,
"name": "SKU name",
"short_description": "SKU short description",
"long_description": "SKU long description",
"provides_access": 1,
"requires_access": 0,
"lca_price": 5800,
"non_lca_price": 5800,
"image_url": "https://warehouse.cca-acc.comproduct-images/access.png"
Without providing parameters the JSON returned will contain all SKUs that exist in the warehouse. You can include URL parameters on the endpoint in order to filter by any of the SKU fields shown above. For example:
https://warehouse.cca-acc.com/api/v1/skus?status=1
This endpoint will only return active SKUs.
You can also retrieve a specific SKU by passing an ID:
https://warehouse.cca-acc.com/api/v1/skus?id=10
Customers
The customers endpoint provides a method of retrieving information related to your outlet's customers, including contact information and enrolment status.
Endpoint
https://warehouse.cca-acc.com/api/v1/customers
Returns
{"customers": [}{]"id": 1,}, ...
"first_name": "John",
"last_name": "Doe",
"email_address": "[email protected]",
"company_name": "SignaSur™",
"enrolment_type": "active",
"enrolment_end": "2026-01-01T04:00:00.000Z"
Without providing parameters the JSON returned will contain all of your outlet's customers that exist in the warehouse. You can include URL parameters on the endpoint in order to filter by any of the customer fields shown above. For example:
https://warehouse.cca-acc.com/api/v1/customers?enrolment_type=active
This endpoint will only return customers with an active enrolment.
You can also retrieve a specific customer by passing an ID or Email:
https://warehouse.cca-acc.com/api/v1/[email protected]
Transactions
The transactions endpoint provides a method of retrieving information related your store transactions that were sent to SignaSur™ using the Create Transaction endpoint.
Endpoint
https://warehouse.cca-acc.com/api/v1/transactions
Returns
{"transactions": [{"id": 1,}
"customer_id": 1,
"received_at": "2026-01-01T04:00:00.000Z",
"confirmed_at": "2026-01-01T04:00:00.000Z",
"line_items": [{]"id": 1,}, ...
"sku_id": 1,
"quantity": 1Without providing parameters the JSON returned will contain all of your outlets transactions that exist in the warehouse. You can include URL parameters on the endpoint in order to filter by any of the transaction fields shown above. For example:
https://warehouse.cca-acc.com/api/v1/transactions?customer_id=1This endpoint will only return transactions made by a particular customer.
You can also retrieve a specific transaction by passing an ID:
https://warehouse.cca-acc.com/api/v1/transactions?id=1Additionally you can query for transactions that contain a specific SKU:
https://warehouse.cca-acc.com/api/v1/transactions?sku_id=1
Create Transaction
The create transaction endpoint is used to send purchase information to SignaSur™. These transactions are used to determine customer enrollment and they are also used to trigger account creation / renewal date synchronization and document credit updates in SignaSur™. For customers making subsequent purchases, their information must match exactly what was previously provided to SignaSur™.
Endpoint
https://warehouse.cca-acc.com/api/v1/transactionTransaction information must be sent in the body of your API calls. Below is an example API call using a CURL command:
curl --request POST --url https://warehouse.cca-acc.com/api/v1/transaction --header 'Content-Type: application/json' --data '{"outlet": {}'"access_token": "your_access_token_here",},
"domain": "youroutletdomain.com"
"customer": {"first_name": "John",},
"last_name": "Doe",
"email_address": "[email protected]",
"company_name": "SignaSur™",
"company_id": 12
"order": {"line_items": [}{]"sku_id": 1,}, ...
"sku": "DW-001",
"quantity": 1Note that if company_id is not set, a new company will be created in SignaSur™.
Verify Enrolment
The verify enrolment endpoint returns information regarding whether or not a customer has an active enrolment. This endpoint can be used to implement purchasing rules on products in your store such as preventing inactive customers from purchasing non-enrolment SKUs. Also, users renewing their enrolment can only do so within a set time period from their expiry date (i.e. 90 days) - you should refer to the canPurchaseEnrollment value to determine if they are eligible to purchase a new enrolment SKU yet.
Endpoint
https://warehouse.cca-acc.com/api/v1/verify-enrollmentTo verify a customer, pass their email address in the body of your API call. Here's an example using a cURL command:
curl --request POST --url https://warehouse.cca-acc.com/api/v1/verify-enrollment --header 'Content-Type: application/json' --data '{"outlet": {}'"access_token": "your_access_token_here",},
"domain": "youroutletdomain.com"
"customer": {"email_address": "[email protected]"}Returns
{"type": "active",}
"canPurchaseEnrollment": false,
"expirationDate": "2026-01-01T04:00:00.000Z"
Company Lookup
The company lookup endpoint returns information about companies that exist in SignaSur™.
Endpoint
https://warehouse.cca-acc.com/api/v1/company-lookupTo check for the existence of a company, pass their full or partial company name. Here's an example using a cURL command:
curl --request POST --url https://warehouse.cca-acc.com/api/v1/company-lookup --header 'Content-Type: application/json' --data '{"outlet": {}'"access_token": "your_access_token_here",},
"domain": "youroutletdomain.com"
"user_company_name": "Signa"Returns
{"status": 200,}'
"exactMatch": false,
"partialMatches": [{]"company_name": "SignaSur™",}, ...
"ccaunique_id": "123",
"id": 123,
"main_city": "Toronto",
"main_state_province": "ON"Note that if there is an exact match for the company name, exactMatch will contain a single company object. If there are only partial matches, exactMatch will be false and partialMatches will be an array of company objects. A company's city and state/province fields may be blank.