Property Information Pack API
Create a private, customer-branded PDF from the Property Insights API catalogue.
How it works
- Create a saved brand profile and optionally upload a logo.
- Submit a property with an
Idempotency-Keyheader. - Poll the returned status path while the data and PDF are prepared.
- Use the authenticated download path when the job is ready or partial.
Billing details in the response
Successful chargeable JSON responses include a top-level billing object. The endpoint examples on this page focus on the endpoint-specific data, so this repeated block may not be shown in every example.
"billing": {
"mode": "prepaid",
"creditsCharged": 1,
"creditsRemaining": 1999,
"creditsRefreshAt": "2026-08-14T09:30:00.000Z"
}| Field or header | Meaning |
|---|---|
| billing.creditsCharged X-Credits-Charged | Credits charged by this call. Failed and non-chargeable calls return 0 in the header. |
| billing.creditsRemaining X-Credits-Remaining | The credit balance after the call. |
| billing.creditsRefreshAt X-Credits-Refresh-At | The next monthly credit refresh as an ISO 8601 timestamp. Trial and non-renewing balances return null and omit the header. |
All authenticated API-key calls expose the billing headers, including validation errors and zero-credit status or management requests. Only successful chargeable JSON responses add the billing object to the response body.
Create a pack
https://propertyinsights.co.uk/api/v1/information-packs
Headers
| Header | Required | Value |
|---|---|---|
| x-api-key | Yes | Your Property Insights API key. |
| Idempotency-Key | Yes | A unique reference between 8 and 128 characters. Reuse it only when retrying the same request. |
| Content-Type | Yes | application/json |
Request body
Identify the property with a uprn, or with both address and postcode. All other fields are optional unless noted below.
| Field | Type | Required | Description |
|---|---|---|---|
| property.address | string | Conditional | Property address, up to 300 characters. Required with postcode when no UPRN is supplied. |
| property.postcode | string | Conditional | A valid UK postcode. Required with address when no UPRN is supplied. |
| property.uprn | string | Conditional | A 1 to 12 digit UPRN. Can be used instead of address and postcode. |
| property.titleNumber | string | No | HM Land Registry title number, 3 to 20 letters or digits. Useful when more than one title matches. |
| property.askingPrice | number | Conditional | Positive amount up to 100,000,000. Required when a purchase or renovation scenario is supplied. |
| property.propertyType | string | No | Descriptive property type, up to 80 characters. |
| property.bedrooms | integer | No | Whole number from 0 to 100. |
| property.floorAreaSqM | number | No | Positive internal floor area in square metres, up to 100,000. |
| brandProfileId | UUID | No | A saved brand profile owned by the API account. The default profile is used when omitted. |
| scenarios.purchase.propertyType | string | No | residential or commercial. Defaults to residential. |
| scenarios.purchase.firstTimeBuyer | boolean | No | Defaults to false. |
| scenarios.purchase.higherRate | boolean | No | Whether the higher SDLT rates apply. Defaults to false. |
| scenarios.purchase.ukResident | boolean | No | Defaults to true. |
| scenarios.renovation.extensionAreaSqM | number | No | Proposed extension area from 0 to 100,000 square metres. Defaults to 0. |
| scenarios.renovation.renovationUpliftPercent | number | No | Estimated uplift from 0 to 50 percent. Defaults to 0. |
| report.title | string | No | Cover title, up to 120 characters. Defaults to Property Information Pack. |
| report.producedFor | string | No | Customer or organisation name shown on the cover, up to 140 characters. |
| report.sections | string or string[] | No | full, or a non-empty array of supported section names. Defaults to full. |
Supported section names: identity, valuation, soldEvidence, marketTrends, energy, councilTax, ownership, crime, schools, scenarios and finance.
Request
{
"property": {
"address": "12 Example Street",
"postcode": "EX1 2AB",
"askingPrice": 425000,
"propertyType": "Terraced",
"bedrooms": 3
},
"brandProfileId": "YOUR_BRAND_PROFILE_UUID",
"scenarios": {
"purchase": {
"propertyType": "residential",
"higherRate": true,
"ukResident": true
},
"renovation": {
"extensionAreaSqM": 18,
"renovationUpliftPercent": 8
}
},
"report": {
"title": "Property Information Pack",
"producedFor": "Alex Example"
}
}202 response
{
"success": true,
"data": {
"id": "JOB_UUID",
"status": "queued",
"progress": 5,
"creditsReserved": 100,
"remainingCredits": 1900,
"statusPath": "/api/v1/information-packs/JOB_UUID"
},
"billing": {
"mode": "prepaid",
"creditsCharged": 100,
"creditsRemaining": 1900,
"creditsRefreshAt": "2026-08-14T09:30:00.000Z"
}
}Status and download
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/v1/information-packs/{jobId} | Read the current job status and progress. |
| GET | /api/v1/information-packs/{jobId}/download | Download a ready or partial PDF. |
Both routes require the same x-api-key used to create the job. jobId is the UUID returned by the create request.
Job states are queued, fetching, rendering, ready, partial, failed and expired. A partial pack is usable but includes explicit source warnings.
{
"success": true,
"data": {
"id": "JOB_UUID",
"status": "ready",
"progress": 100,
"downloadPath": "/api/v1/information-packs/JOB_UUID/download",
"expiresAt": "2026-08-10T12:00:00.000Z"
}
}Brand profiles
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/v1/information-pack-brands | List saved profiles. |
| POST | /api/v1/information-pack-brands | Create a profile. |
| PATCH | /api/v1/information-pack-brands/{id} | Update a profile owned by the API account. |
| DELETE | /api/v1/information-pack-brands/{id} | Delete a profile. |
| POST | /api/v1/information-pack-brands/logo | Upload a logo using multipart form data. |
All brand routes require x-api-key. Create and update requests use JSON and accept the fields below.
| Field | Required | Description |
|---|---|---|
| name | Create only | Profile name, up to 80 characters. |
| companyName | Create only | Company name shown in the pack, up to 140 characters. |
| logoPath | No | Private asset path returned by the logo upload route. |
| primaryColour | No | Six-digit hex colour. Defaults to #17324D. |
| secondaryColour | No | Six-digit hex colour. Defaults to #EEF4F7. |
| accentColour | No | Six-digit hex colour. Defaults to #D7A741. |
| website | No | Website shown in the pack. |
| No | Contact email shown in the pack. | |
| phone | No | Contact telephone number shown in the pack. |
| companyNumber | No | Company registration number. |
| footerText | No | Footer text, up to 600 characters. |
| isDefault | No | Use this profile when brandProfileId is omitted. |
Logo uploads use multipart/form-data with the file in a field named logo. PNG, JPEG and WebP files up to 2MB are accepted. Assets and generated PDFs remain private.
Errors
| HTTP | Code | Meaning |
|---|---|---|
| 400 | IDEMPOTENCY_KEY_REQUIRED | The idempotency key is missing or is not between 8 and 128 characters. |
| 400 | MISSING_PROPERTY | Neither a UPRN nor an address and postcode pair was supplied. |
| 400 | INVALID_* | One or more body fields failed the constraints documented above. |
| 402 | INSUFFICIENT_CREDITS | The account does not have enough credits to reserve the pack. |
| 404 | BRAND_PROFILE_NOT_FOUND | The supplied brand profile does not belong to the API account. |
| 409 | IDEMPOTENCY_KEY_REUSED | The key was already used with a different request body. |
Report limitations
Automated valuations and market scores are modelled estimates. Boundary geometry represents HM Land Registry general boundaries and is not surveyed legal boundary data. The pack is not a survey, legal title report, mortgage offer, tax advice or RICS valuation.