Download OpenAPI specification:Download
Preparing an R&D claim can be a very intensive process, involving a large number of stakeholders, and a lot of information (both financial and technical).
Once the process of preparing the financial and technical information is done, the final phase of an R&D claim is largely administrative, a job for the 'back office' of a consultancy. This final phase - the Claim Completion phase - is about bringing all the prepared information together, getting it submitted to HMRC, and tracking the claim through to a successful outcome.
Claimer's Claim Completion Suite's is a suite of products/modules that facilitate a high-level of process automation across the whole completion phase. The goal is to significantly reduce the administrative burden consultancies encounter in this phase by providing software solutions for every step of the completion workflow.
To address the inconsistent terminology used within the industry, we have chosen to adopt the preferred naming conventions of HM Revenue & Customs (HMRC).
For comprehensive understanding, it's essential to grasp two key concepts as outlined by HMRC:
The Pre-Notification API allows you to submit Company Notification Forms (CNFs / Pre-Notifications) to HMRC on behalf of your clients. You send the data needed for a CNF in JSON; Claimer populates and submits the form to HMRC asynchronously and notifies you of the outcome via webhook.
POST /clients/{...}/financial-years/{...}/pre-notifications accepts the form data and starts the submission process.POST .../pre-notifications/should-submit returns whether HMRC requires a CNF for this client and financial year, given optional prior-claim information.GET /clients/{...}/pre-notifications lists every CNF on file for a Companies House number, with current status and HMRC confirmation reference where available.Submitted, the PDF returned by HMRC can be retrieved via the confirmation-document endpoint.Creates a new Pre-Notification submission for the supplied client and financial year.
The endpoint validates the request body synchronously and, on success, returns 201 with the new Pre-Notification's identifier. Claimer then populates and submits the form to HMRC asynchronously. You will receive a pre-notification-submission-started webhook shortly after the 201, followed eventually by either pre-notification-submitted (success, with HMRC confirmation reference) or pre-notification-submission-failed (terminal failure). See the Webhook section for the full event lifecycle.
If a Pre-Notification is already in progress for the same client and financial year, the endpoint returns 409 with the existing Pre-Notification's id.
| registeredCompanyNumber required | string A valid Companies House company number for an R&D eligible company. |
| financialYear required | string(\d{4}-\d{2}-\d{2})\.\.(\d{4}-\d{2}-\d{2}) Date range of financial year {startDate}..{endDate} - e.g. 2021-01-02..2021-12-31. Please refer to this section for more info about the Financial Years. |
| external_id required | string (ExternalId) | ||||||||
object (CompanyDetailsRaw) | |||||||||
| |||||||||
object (AccountingPeriod) First accounting period within the financial year. Optional - will use first accounting period of associated claim if not specified. | |||||||||
| |||||||||
object (AgentDetailsRaw) | |||||||||
| |||||||||
object (SeniorOfficerRaw) | |||||||||
| |||||||||
| hmrc_confirmation_email_address required | string Email address HMRC will send the submission confirmation to. Must be a valid email of 241 characters or fewer. | ||||||||
| planned_activities | string | ||||||||
| agent_consent_to_use_email required | boolean True to give permission for HMRC to use email communications, which may include attached files. False, use post to send communications. | ||||||||
| senior_officer_consent_to_use_email required | boolean True to give permission for HMRC to use email communications, which may include attached files. False, use post to send communications. | ||||||||
{- "external_id": "string",
- "company_details": {
- "utr": "string"
}, - "accounting_period": {
- "start_date": "2019-08-24",
- "end_date": "2019-08-24"
}, - "agent_details": {
- "lead_consultant_name": "string",
- "consultant_email": "string"
}, - "senior_officer_details": {
- "name": "string",
- "role": "string",
- "email": "string",
- "telephone": "string"
}, - "hmrc_confirmation_email_address": "string",
- "planned_activities": "string",
- "agent_consent_to_use_email": true,
- "senior_officer_consent_to_use_email": true
}{- "id": "string",
- "external_id": "string",
- "client_id": "string",
- "financial_year_id": "string"
}| registeredCompanyNumber required | string A valid Companies House company number for an R&D eligible company. |
| financialYear required | string(\d{4}-\d{2}-\d{2})\.\.(\d{4}-\d{2}-\d{2}) Date range of financial year {startDate}..{endDate} - e.g. 2021-01-02..2021-12-31. Please refer to this section for more info about the Financial Years. |
| preNotificationId required | string A valid Pre-Notification ID |
| registeredCompanyNumber required | string A valid Companies House company number for an R&D eligible company. |
| financialYear required | string(\d{4}-\d{2}-\d{2})\.\.(\d{4}-\d{2}-\d{2}) Date range of financial year {startDate}..{endDate} - e.g. 2021-01-02..2021-12-31. Please refer to this section for more info about the Financial Years. |
object (PreviousClaimInfo) | |||||||
| |||||||
{- "previous_claim_info": {
- "submission_date": "2019-08-24",
- "financial_year_start_date": "2019-08-24",
- "amendment_date": "2019-08-24"
}
}{- "should_submit": true
}Retrieves all Company Notification Forms (CNFs/pre-notifications) associated with a specific company registered in your account.
Notes:
submission_reference field will only contain a value when the status is Submittednull if not yet set (during initial draft stages)Use Cases:
| registeredCompanyNumber required | string A valid Companies House company number for an R&D eligible company. |
[- {
- "id": "pn_abc123def456",
- "financial_year_start": "2023-04-01",
- "financial_year_end": "2024-03-31",
- "status": "Submitted",
- "submitted_at": "2024-05-15T14:30:00Z",
- "created_at": "2024-05-10T09:00:00Z",
- "submission_reference": "HMRC-REF-2024-001234"
}, - {
- "id": "pn_xyz789ghi012",
- "financial_year_start": "2022-04-01",
- "financial_year_end": "2023-03-31",
- "status": "Submitted",
- "submitted_at": "2023-06-20T11:45:00Z",
- "created_at": "2023-06-15T10:30:00Z",
- "submission_reference": "HMRC-REF-2023-005678"
}, - {
- "id": "pn_mno345pqr678",
- "financial_year_start": "2024-04-01",
- "financial_year_end": "2025-03-31",
- "status": "InProgress",
- "submitted_at": null,
- "created_at": "2024-11-01T08:15:00Z",
- "submission_reference": null
}
]Claimer POSTs Pre-Notification events to a URL you configure during onboarding. Events cover the start of a submission and its terminal outcome (success or failure). See the endpoint below for the full lifecycle, event payloads, and delivery guarantees.
Claimer delivers events to a customer-chosen webhook endpoint as a Pre-Notification progresses through its lifecycle. The lifecycle is summarised below — the table lists every event Claimer can send and whether it is guaranteed.
For any Pre-Notification that Claimer attempts to submit to HMRC, exactly two webhook events are delivered, in order:
pre-notification-submission-started — sent first, when Claimer begins populating the Pre-Notification on the caller's behalf (immediately after a successful POST /pre-notifications). Always sent.pre-notification-submitted — sent on successful HMRC submission, with the HMRC confirmation reference. Terminal success.pre-notification-submission-failed — sent if Claimer exhausts retries and the submission reaches a terminal failure state. Terminal failure.These two terminal events are mutually exclusive: a given Pre-Notification will receive either pre-notification-submitted or pre-notification-submission-failed, never both.
POST /pre-notifications
│
▼
pre-notification-submission-started ── always sent
│
▼
(population + submission to HMRC, with retries)
│
├──► pre-notification-submitted ── success (terminal)
│
└──► pre-notification-submission-failed ── terminal failure
| Event | When | Guaranteed? |
|---|---|---|
pre-notification-submission-started |
Population begins after POST /pre-notifications. |
Yes — always the first event. |
pre-notification-submitted |
HMRC accepts the submission and returns a confirmation reference. | Sent if and only if the submission succeeds. |
pre-notification-submission-failed |
Claimer reaches a terminal failure state after exhausting retries. | Sent if and only if the submission ultimately fails. |
The status field returned by GET /pre-notifications reflects more granular internal state than the webhook stream. The following transitions are observable via the REST API but do not produce webhook events:
Populating — intermediate state while Claimer is preparing the form.AwaitingDraftApproval — populated draft awaiting in-app approval before submission.SubmittedExternally — Pre-Notification marked as submitted outside of Claimer.NotRequired — Pre-Notification determined not to be required.PopulationFailed / SubmissionFailed states that are subsequently retried.If you need to react to any of these states, poll GET /pre-notifications.
POST to your configured webhook URL with a JSON body matching the schema described below.200 response acknowledges receipt. Any other status code is treated as failure and Claimer retries with exponential back-off.message_id (envelope) and event_id (event body) — both are stable across retries of the same event, so receivers can deduplicate.| X-Request-ID required | string Request ID used for tracking or logging purposes. Value is unique to the request. |
| Content-Type required | string The media type of this message, e.g application/json |
| Authorization | string Will be set if basic auth is set in the url (recommended) |
| message_id required | string Unique event/message id. Stable across retries of the same event — use for deduplication. | ||||||||||||||||||
| timestamp required | string <date-time> Time the webhook delivery was attempted. | ||||||||||||||||||
required | PreNotificationSubmissionStarted (object) or PreNotificationSubmitted (object) or PreNotificationSubmissionFailed (object) (PreNotificationEvent) | ||||||||||||||||||
One of
| |||||||||||||||||||
{- "message_id": "msg_8a3f1c2e9b40",
- "timestamp": "2026-05-21T09:00:01Z",
- "event": {
- "event_type": "pre-notification-submission-started",
- "event_id": "evt_01HXYZSTART001",
- "event_timestamp": "2026-05-21T09:00:00Z",
- "tenant_id": "tnt_acmeconsulting",
- "client_id": "cli_acme123",
- "financial_year_id": "fy_2024_2025",
- "pre_notification_id": "pn_abc123def456",
- "external_id": "ext-ref-2026-001",
- "started_at": "2026-05-21T09:00:00Z"
}
}