API reference
This page contains the technical reference for the embedded dashboard endpoints. It is published so that you can assess the scope of the integration before implementing it.
These endpoints only respond to integrator keys issued by Lawwwing after the onboarding process. Request access to obtain yours.
Base URLβ
| Environment | Base URL |
|---|---|
| Production | https://api.lawwwing.com/ |
| Staging | https://api.staging.lawwwing.com/ |
Authenticationβ
Every request is authenticated through the Authorization header with your integrator key.
| Header | Value |
|---|---|
Authorization | Integrator-Key {your_api_key} |
Content-Type | application/json |
The integrator key identifies your organisation and allows subscriptions to be created and cancelled. Use it exclusively from your backend and never from the browser. If it is missing or invalid, the API responds with 401 Unauthorized.
Endpointsβ
Check connectivityβ
GET /api/integrator/ping/
Verifies that the API is reachable and that your credentials are valid.
Exampleβ
curl -X GET "https://api.lawwwing.com/api/integrator/ping/" \
-H "Authorization: Integrator-Key {your_api_key}" \
-H "Content-Type: application/json"
Responseβ
{
"message": "pong"
}
1. Onboard a websiteβ
POST /api/integrators/sites/
Registers your customer's domain in Lawwwing.
Parametersβ
| Field | Type | Required | Description |
|---|---|---|---|
url | string (URL) | β | URL of the website to create |
Exampleβ
curl -X POST "https://api.lawwwing.com/api/integrators/sites/" \
-H "Authorization: Integrator-Key {your_api_key}" \
-H "Content-Type: application/json" \
-d '{
"url": "client.example.com"
}'
Responseβ
{
"site": "fa514048-ac51-4677-b16d-9e849c5406c5",
"scheme": "https",
"fqdn": "client.example.com",
"subdomain": "client",
"domain": "example",
"suffix": "com",
"registered_domain": "example.com",
"path": ""
}
The site field is the unique identifier of the website (site_id). Store it alongside your customer record: you will need it in every other operation.
2. Retrieve a websiteβ
GET /api/integrators/sites/{site_id}/
Retrieves the details of a website from its identifier.
Exampleβ
curl -X GET "https://api.lawwwing.com/api/integrators/sites/fa514048-ac51-4677-b16d-9e849c5406c5/" \
-H "Authorization: Integrator-Key {your_api_key}" \
-H "Content-Type: application/json"
Responseβ
{
"site": "fa514048-ac51-4677-b16d-9e849c5406c5",
"scheme": "https",
"fqdn": "client.example.com",
"subdomain": "client",
"domain": "example",
"suffix": "com",
"registered_domain": "example.com",
"path": ""
}
3. Create a subscriptionβ
POST /api/integrators/sites/{site_id}/subscription/
Activates the service on the website with the given plan and modules.
Parametersβ
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
tier | string | β | No default | Plan to activate: starter, growth, professional or comfort |
interval | string | β | monthly | Billing frequency: monthly or annually |
modules | array | β | [] | Additional modules, in the format { "name": string, "quantity": number } |
Available plans (tier)β
| Plan | Customer profile |
|---|---|
starter | Simple websites with basic compliance needs. |
growth | Corporate websites and growing online stores. |
professional | Demanding or multilingual projects. Includes every available language. |
comfort | High-end managed plan. Includes every module and a monthly allowance of AI Sentinel credits. |
You can review the features and pricing of each plan at lawwwing.com/precios.
Available modules (modules)β
Modules are optional capabilities added to the website subscription as extra line items. Each element of the array requires two fields:
| Field | Type | Required | Description |
|---|---|---|---|
name | string | β | Module identifier, as listed in the table below. |
quantity | integer β₯ 1 | β | Number of units of the module to purchase. |
name | Module | What it enables | Meaning of quantity |
|---|---|---|---|
extra_language | Additional language | Adds one more language to the consent banner and the legal documents, and enables the language selector in the dashboard. | Number of additional languages on top of those included in the plan. For example, 2 adds two languages. |
accessibility_plugin | Accessibility plugin | Enables the accessibility widget on the customer's website. | Always 1, as it is an activation module. |
ai_sentinel_module | AI Sentinel | Enables AI Sentinel and adds a monthly allowance of analysis credits. | Number of modules purchased. For example, 2 adds two monthly credit packs. |
- Only send the modules the customer has purchased. If there are none, omit the
modulesfield or send[]. - The
professionalplan already includes every language, so you should not addextra_language. - The
comfortplan already includes every module, so you normally do not need to sendmodules. - Modules are billed with the same
intervalas the plan. You cannot combine an annual plan with monthly modules. - The same
namemust appear only once in the array. To purchase several units, usequantity.
If you send a name that is not in the table, a quantity lower than 1, or an unsupported tier or interval, the API responds with 400 Bad Request indicating the affected field.
Not sure which combination to offer your customers? Book a call with our team.
Exampleβ
curl -X POST "https://api.lawwwing.com/api/integrators/sites/fa514048-ac51-4677-b16d-9e849c5406c5/subscription/" \
-H "Authorization: Integrator-Key {your_api_key}" \
-H "Content-Type: application/json" \
-d '{
"tier": "growth",
"interval": "monthly",
"modules": [
{"name": "extra_language", "quantity": 2},
{"name": "accessibility_plugin", "quantity": 1}
]
}'
Responseβ
{
"message": "Subscription created"
}
The website must not have an active subscription in order to create a new one.
4. Retrieve the subscriptionβ
GET /api/integrators/sites/{site_id}/subscription/
Retrieves the status and terms of the website's subscription.
Exampleβ
curl -X GET "https://api.lawwwing.com/api/integrators/sites/fa514048-ac51-4677-b16d-9e849c5406c5/subscription/" \
-H "Authorization: Integrator-Key {your_api_key}" \
-H "Content-Type: application/json"
Responseβ
{
"status": "active",
"tier": "growth",
"interval": "annually",
"modules": [
{"name": "extra_language", "quantity": 2},
{"name": "accessibility_plugin", "quantity": 1}
],
"valid_until": "2027-01-01T14:38:11Z",
"will_be_renewed": true
}
| Field | Description |
|---|---|
status | Subscription status, for example active or canceled. |
tier | Plan currently purchased. |
interval | Billing frequency. |
modules | Active modules, using the same name and quantity structure used when creating the subscription. |
valid_until | Date until which the service is guaranteed. |
will_be_renewed | false if automatic renewal has been cancelled. |
5. Cancel the subscriptionβ
POST /api/integrators/sites/{site_id}/subscription/cancel/
Cancels the renewal of the active subscription.
Exampleβ
curl -X POST "https://api.lawwwing.com/api/integrators/sites/fa514048-ac51-4677-b16d-9e849c5406c5/subscription/cancel/" \
-H "Authorization: Integrator-Key {your_api_key}" \
-H "Content-Type: application/json"
Responseβ
{
"message": "Subscription canceled"
}
The subscription stays active until the end of the current billing period. Until then you can reactivate it.
6. Reactivate the subscriptionβ
POST /api/integrators/sites/{site_id}/subscription/reactivate/
Reverts a cancellation and restores automatic renewal.
Exampleβ
curl -X POST "https://api.lawwwing.com/api/integrators/sites/fa514048-ac51-4677-b16d-9e849c5406c5/subscription/reactivate/" \
-H "Authorization: Integrator-Key {your_api_key}" \
-H "Content-Type: application/json"
Responseβ
{
"message": "Subscription reactivated"
}
7. Terminate the subscriptionβ
DELETE /api/integrators/sites/{site_id}/subscription/
Permanently removes the website's subscription.
Exampleβ
curl -X DELETE "https://api.lawwwing.com/api/integrators/sites/fa514048-ac51-4677-b16d-9e849c5406c5/subscription/" \
-H "Authorization: Integrator-Key {your_api_key}" \
-H "Content-Type: application/json"
Responseβ
{
"message": "Subscription terminated"
}
The website will stop being active immediately. To provide the service again you will need to create a new subscription.
8. Get the embedded dashboard sessionβ
GET /api/integrators/sites/{site_id}/embed/
Generates the session URL used to load the Lawwwing dashboard inside an iframe.
Exampleβ
curl -X GET "https://api.lawwwing.com/api/integrators/sites/fa514048-ac51-4677-b16d-9e849c5406c5/embed/" \
-H "Authorization: Integrator-Key {your_api_key}" \
-H "Content-Type: application/json"
Responseβ
{
"site": "61e21ed7-2770-4fa8-baad-53564ee7651d",
"embed_url": "https://app.lawwwing.com/d/61e21ed7-2770-4fa8-baad-53564ee7651d/?embed=1&token=cd99d2156453544a7c9b6eae13bff3380d4a35ae6a891632a4ff29bc7c2efd83",
"embed_token": "cd99d2156453544a7c9b6eae13bff3380d4a35ae6a891632a4ff29bc7c2efd83"
}
Tokens expire for security reasons. Request a new embed_url on every dashboard load and do not store or reuse the token.
embed_urlThe embed_url field is the value you must assign to the src attribute of the iframe. See the integration guide for the recommended markup.
Response codesβ
| Code | Meaning |
|---|---|
200 / 201 | The operation completed successfully. |
400 | The data sent is not valid. Check the parameters. |
401 | The Authorization header is missing or the key is not valid. |
404 | The website or the subscription does not exist for your integrator account. |