Property Information Pack API

Create a private, customer-branded PDF from the Property Insights API catalogue.

Asynchronous PDFSaved brand profilesPrivate signed downloadsIdempotent charging

How it works

  1. Create a saved brand profile and optionally upload a logo.
  2. Submit a property with an Idempotency-Key header.
  3. Poll the returned status path while the data and PDF are prepared.
  4. Use the authenticated download path when the job is ready or partial.
A full pack reserves a configurable bundle of API credits. Retrying the same request with the same idempotency key does not charge twice. System failures refund the reservation.

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 headerMeaning
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

POST
https://propertyinsights.co.uk/api/v1/information-packs

Headers

HeaderRequiredValue
x-api-keyYesYour Property Insights API key.
Idempotency-KeyYesA unique reference between 8 and 128 characters. Reuse it only when retrying the same request.
Content-TypeYesapplication/json

Request body

Identify the property with a uprn, or with both address and postcode. All other fields are optional unless noted below.

FieldTypeRequiredDescription
property.addressstringConditionalProperty address, up to 300 characters. Required with postcode when no UPRN is supplied.
property.postcodestringConditionalA valid UK postcode. Required with address when no UPRN is supplied.
property.uprnstringConditionalA 1 to 12 digit UPRN. Can be used instead of address and postcode.
property.titleNumberstringNoHM Land Registry title number, 3 to 20 letters or digits. Useful when more than one title matches.
property.askingPricenumberConditionalPositive amount up to 100,000,000. Required when a purchase or renovation scenario is supplied.
property.propertyTypestringNoDescriptive property type, up to 80 characters.
property.bedroomsintegerNoWhole number from 0 to 100.
property.floorAreaSqMnumberNoPositive internal floor area in square metres, up to 100,000.
brandProfileIdUUIDNoA saved brand profile owned by the API account. The default profile is used when omitted.
scenarios.purchase.propertyTypestringNoresidential or commercial. Defaults to residential.
scenarios.purchase.firstTimeBuyerbooleanNoDefaults to false.
scenarios.purchase.higherRatebooleanNoWhether the higher SDLT rates apply. Defaults to false.
scenarios.purchase.ukResidentbooleanNoDefaults to true.
scenarios.renovation.extensionAreaSqMnumberNoProposed extension area from 0 to 100,000 square metres. Defaults to 0.
scenarios.renovation.renovationUpliftPercentnumberNoEstimated uplift from 0 to 50 percent. Defaults to 0.
report.titlestringNoCover title, up to 120 characters. Defaults to Property Information Pack.
report.producedForstringNoCustomer or organisation name shown on the cover, up to 140 characters.
report.sectionsstring or string[]Nofull, 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

MethodEndpointPurpose
GET/api/v1/information-packs/{jobId}Read the current job status and progress.
GET/api/v1/information-packs/{jobId}/downloadDownload 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

MethodEndpointPurpose
GET/api/v1/information-pack-brandsList saved profiles.
POST/api/v1/information-pack-brandsCreate 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/logoUpload a logo using multipart form data.

All brand routes require x-api-key. Create and update requests use JSON and accept the fields below.

FieldRequiredDescription
nameCreate onlyProfile name, up to 80 characters.
companyNameCreate onlyCompany name shown in the pack, up to 140 characters.
logoPathNoPrivate asset path returned by the logo upload route.
primaryColourNoSix-digit hex colour. Defaults to #17324D.
secondaryColourNoSix-digit hex colour. Defaults to #EEF4F7.
accentColourNoSix-digit hex colour. Defaults to #D7A741.
websiteNoWebsite shown in the pack.
emailNoContact email shown in the pack.
phoneNoContact telephone number shown in the pack.
companyNumberNoCompany registration number.
footerTextNoFooter text, up to 600 characters.
isDefaultNoUse 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

HTTPCodeMeaning
400IDEMPOTENCY_KEY_REQUIREDThe idempotency key is missing or is not between 8 and 128 characters.
400MISSING_PROPERTYNeither a UPRN nor an address and postcode pair was supplied.
400INVALID_*One or more body fields failed the constraints documented above.
402INSUFFICIENT_CREDITSThe account does not have enough credits to reserve the pack.
404BRAND_PROFILE_NOT_FOUNDThe supplied brand profile does not belong to the API account.
409IDEMPOTENCY_KEY_REUSEDThe 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.