Build with it
For developers
The seven tools as a free REST API and an MCP server. No key and no sign-in.
Not building software? Start with next steps
They give the same results as this site, from the same public rules. Every result carries its sources, its rules version and the date the law was checked.
Endpoints
- REST base
https://plenda.co.uk /api/v1 To run a tool, POST a JSON body to
/api/v1/tools/{name}, where {name} is the tool name withoutehcp_.- Tool list
/api/v1/toolsEvery tool, with its input and output schemas.
- OpenAPI
/openapi.jsonAn OpenAPI 3.1 description of every tool.
- Notes for AI tools
/llms.txtWhich tool to use, and the rules for assistants.
- MCP server
https://plenda.co.uk /mcp Streamable HTTP with JSON responses, stateless, with no sign-in. Add it as a custom connector in Claude, ChatGPT, Microsoft Copilot or another assistant that connects to MCP servers.
- Server card
/.well-known/mcp.jsonThe server's name, version, endpoints and tools, as JSON.
- Rules
england-2026.10Law as at 30 September 2026. Every result carries this version and date. Changes are in the changelog.
Live, on this site's API
Try it
Choose a tool, change the request if you like, and send it. The response shows as this site shows it, and as JSON.
Take out names, dates of birth and other details before you edit the body. Use [CHILD], [SCHOOL] and [PARENT] instead. The example is made up.
Sending from this page needs JavaScript. The worked example below shows a request and its response.
What comes back
result- The answer as data. Every result has
summary_for_user,rules_versionandlaw_as_at, the date the law was checked. text- The same answer as plain text, as an assistant gets it.
detail- Extra detail for display, such as full findings. Not every tool sends it.
error- Sent instead when a request cannot be used, with a message that says why.
Status codes
200- A result.
400- The body cannot be used, for example a date that is not real.
404- No tool has that name.
413- The body is over 400 KB.
Worked example
Example: work out deadlines
This request asks for the time limits after a local authority received a request for an EHC needs assessment 28 days ago. The date is made up.
The request with curl
curl -s https://plenda.co.uk/api/v1/tools/calculate_deadlines \
-H 'content-type: application/json' \
-d '{"audience":"professional","events":[{"type":"request_received","date":"2026-09-14"}]}'
The request as HTTP
POST /api/v1/tools/calculate_deadlines HTTP/1.1
Host: plenda.co.uk
Content-Type: application/json
Accept: application/json
{
"audience": "professional",
"events": [
{
"type": "request_received",
"date": "2026-09-14"
}
]
}
The request from JavaScript
const res = await fetch('https://plenda.co.uk/api/v1/tools/calculate_deadlines', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({"audience":"professional","events":[{"type":"request_received","date":"2026-09-14"}]}),
});
const data = await res.json();
if (res.ok === false) throw new Error(data.error);
console.log(data.result.summary_for_user);
The response
This is what the API answered (status 200) when this page was made. Dates in it are worked out from today.
{
"result": {
"view": "timeline",
"summary_for_user": "The council's next date: the council's decision on whether to assess, due by 26 October 2026.",
"next_actions": [
{
"text": "The council's next date: the council's decision on whether to assess, by Monday 26 October 2026.",
"date": "2026-10-26",
"owner": "council"
}
],
"keep_wording": [
"These dates are worked out only from the dates given."
],
"rules_version": "england-2026.10",
"law_as_at": "2026-09-30",
"schema_version": "1.0",
"engine_version": "1.0.0",
"disclaimer": "General information about the law in England, not legal advice. Plenda is impartial: it explains what the law and the SEND Code of Practice say and does not take sides. For advice on a particular case, contact your local SEND Information, Advice and Support Service (SENDIASS) or IPSEA.",
"as_of": "2026-10-12",
"audience": "professional",
"rights_holder": "parent",
"rights_holder_basis": "assumed",
"rights_holder_reason": "Assumed: no year group was given.",
"rights_holder_note": null,
"next_for_you": null,
"next_for_council": {
"id": "assessment_decision",
"title": "Council decides whether to assess",
"due_date": "2026-10-26",
"due_time": null,
"message": "Due by 26 October 2026 (14 days from today)."
},
"groups": [
{
"group": "council",
"title": "The council's dates",
"items": [
{
"id": "assessment_decision",
"rule_id": "assessment_decision",
"title": "Council decides whether to assess",
"status": "due_soon",
"status_label": "Due soon",
"due_date": "2026-10-26",
"due_time": null,
"message": "Due by 26 October 2026 (14 days from today).",
"sources": [
{
"cite": "SEND Regulations 2014, reg 5(1)",
"url": "https://www.legislation.gov.uk/uksi/2014/1530/regulation/5",
"status": "statute",
"status_label": "Law (Act or Regulations)"
}
]
}
]
}
],
"deadlines": [
{
"id": "assessment_decision",
"instance_key": "dl1_8a9cb206e9a73411",
"rule_id": "assessment_decision",
"title": "Council decides whether to assess",
"stage": "deciding_to_assess",
"owner": "council",
"group": "council",
"who": "The council",
"kind": "duty",
"status": "due_soon",
"status_class": "pending",
"status_label": "Due soon",
"due_date": "2026-10-26",
"due_time": null,
"days_remaining": 14,
"started_by": {
"type": "request_received",
"date": "2026-09-14",
"label": "The council received the request for an EHC needs assessment",
"date_basis": "received"
},
"counted_from": "2026-09-14",
"done_date": null,
"days_late": null,
"message": "Due by 26 October 2026 (14 days from today).",
"what": "The council must tell the family whether it will carry out an EHC needs assessment, and give reasons if it will not.",
"counting": "As soon as practicable, and in any case within 6 weeks of the day the council received the request, or the child or young person was brought to its attention: the same day of the week, 6 weeks later.",
"if_missed": null,
"exceptions": [
{
"id": "school_closure",
"label": "Advice was asked of a school, college or early years setting during a closure of at least 4 weeks (the period from 1 week before it closed to 1 week before it reopened)",
"regulation": "reg 5(4)"
},
{
"id": "personal_circumstances",
"label": "Exceptional personal circumstances affected the child, parent or young person",
"regulation": "reg 5(4)"
},
{
"id": "absence_4_weeks",
"label": "The child, parent or young person was away from the council's area for at least 4 weeks in a row",
"regulation": "reg 5(4)"
}
],
"exception_relied_on": null,
"approximate": false,
"cautions": [
"If the council decides not to assess, reg 4(1) separately requires that notice within 6 weeks and lists no exceptions. The reg 5(4) exceptions refer only to the reg 5(1) limit, so on the wording a refusal is still due by this date. Whether a court would read an exception into reg 4(1) is not settled."
],
"sources": [
{
"cite": "SEND Regulations 2014, reg 5(1)",
"url": "https://www.legislation.gov.uk/uksi/2014/1530/regulation/5",
"status": "statute",
"status_label": "Law (Act or Regulations)"
}
],
"confidence": "high",
"short": "Council's decision on whether to assess due",
"exception_note": "If the council relies on reg 5(4): the fixed date stops applying only where meeting it is impractical for a listed reason, and the duty to act as soon as practicable remains."
}
],
"counts": {
"due_soon": 1
},
"status_classes": {
"pending": 1
},
"hidden": {
"done": 0,
"closed": 0,
"steps": 0,
"superseded": 0
},
"truncated": false,
"needs_info": [],
"conditional": [],
"notes": [
"Statuses such as \"done\" and \"late\" are worked out only from the dates given. Plenda cannot see the council's records.",
"Plenda counts \"within N weeks of\" a date as N weeks after that day (the same weekday), \"beginning with\" or \"starting with\" a day as including that day, and months as the same date in the later month (or the last day of a shorter month). A period of months that includes its first day ends the day before that date or, when the end month has no such date, on its last day (12 months beginning with 29 February end on 28 February). The Regulations do not set a counting convention, so treat the day before as the safe date for anything that needs to be done.",
"An exception only applies where meeting the time limit is impractical because of the listed reason. It does not give a set number of extra days: the fixed date stops applying, but the duty itself remains, and where the Regulations say \"as soon as practicable\" (as for the decision whether to assess, a decision not to issue a plan and the final plan), that still applies. Staff shortages and waiting lists are not exceptions."
],
"calendar": [
{
"uid": "dl1_8a9cb206e9a73411@plenda",
"title": "EHCP: Council's decision on whether to assess due",
"date": "2026-10-26",
"time": null
}
],
"law_in_force": {
"as_at": "2026-09-30",
"note": "The government has proposed changes to the SEND system. Proposals are not law: these dates follow the law in force on 30 September 2026, and rights today are unchanged until new law is made and comes into force."
},
"case_summary": {
"stage": "requesting",
"events": [
{
"type": "request_received",
"date": "2026-09-14",
"date_basis": "received"
}
],
"open_deadlines": [
{
"id": "assessment_decision",
"due_date": "2026-10-26"
}
],
"as_of": "2026-10-12",
"role": "professional"
},
"presentation": "Lead with summary_for_user, then next_actions. Give each date with whose date it is and its source, and say the dates are worked out only from the dates given. For a council date that has passed, say it passed with no record of it being done (on the dates given) and give if_missed.means; do not say the council broke the law. A date with conditional_duty applies only on one answer: give its message as it is, not as a passed date. After a closed family window, relay its after_closed. Relay keep_wording exactly. Do not tell the user which option to take or predict an outcome. Offer case_summary for the user to save."
},
"text": "The council's next date: the council's decision on whether to assess, due by 26 October 2026.\nDates (whose | what | date | status | source):\n- council | Council decides whether to assess | 26 October 2026 | Due soon, 14 days to go | SEND Regulations 2014, reg 5(1)\ncase_summary (in structuredContent; ids and dates only; offer it to the user to save and paste back later). Its events: {\"events\":[{\"type\":\"request_received\",\"date\":\"2026-09-14\",\"date_basis\":\"received\"}],\"as_of\":\"2026-10-12\",\"role\":\"professional\"}\nLead with summary_for_user, then next_actions. Give each date with whose date it is and its source, and say the dates are worked out only from the dates given. For a council date that has passed, say it passed with no record of it being done (on the dates given) and give if_missed.means; do not say the council broke the law. A date with conditional_duty applies only on one answer: give its message as it is, not as a passed date. After a closed family window, relay its after_closed. Relay keep_wording exactly. Do not tell the user which option to take or predict an outcome. Offer case_summary for the user to save.",
"detail": {
"deadlines": [
{
"id": "assessment_decision",
"instance_key": "dl1_8a9cb206e9a73411",
"rule_id": "assessment_decision",
"title": "Council decides whether to assess",
"stage": "deciding_to_assess",
"owner": "council",
"group": "council",
"who": "The council",
"kind": "duty",
"status": "due_soon",
"status_class": "pending",
"status_label": "Due soon",
"due_date": "2026-10-26",
"due_time": null,
"days_remaining": 14,
"due_range": null,
"started_by": {
"type": "request_received",
"date": "2026-09-14",
"label": "The council received the request for an EHC needs assessment",
"date_basis": "received",
"approximate": false
},
"counted_from": "2026-09-14",
"done_date": null,
"done_timing": null,
"shown_by": null,
"days_late": null,
"message": "Due by 26 October 2026 (14 days from today).",
"what": "The council must tell the family whether it will carry out an EHC needs assessment, and give reasons if it will not.",
"counting": "As soon as practicable, and in any case within 6 weeks of the day the council received the request, or the child or young person was brought to its attention: the same day of the week, 6 weeks later.",
"counting_rule": {
"unit": "weeks",
"n": 6,
"phrase": "within",
"anchor_text": "the day the council received the request, or the child or young person was brought to its attention",
"anchor_basis": "received",
"inclusive_start": false,
"direction": "after",
"outer_limit": "as_soon_as_practicable",
"end_adjust": null
},
"if_missed": null,
"after_closed": null,
"exceptions": [
{
"id": "school_closure",
"label": "Advice was asked of a school, college or early years setting during a closure of at least 4 weeks (the period from 1 week before it closed to 1 week before it reopened)",
"regulation": "reg 5(4)"
},
{
"id": "personal_circumstances",
"label": "Exceptional personal circumstances affected the child, parent or young person",
"regulation": "reg 5(4)"
},
{
"id": "absence_4_weeks",
"label": "The child, parent or young person was away from the council's area for at least 4 weeks in a row",
"regulation": "reg 5(4)"
}
],
"exception_relied_on": null,
"exception_note": "If the council relies on reg 5(4): the fixed date stops applying only where meeting it is impractical for a listed reason, and the duty to act as soon as practicable remains.",
"approximate": false,
"cautions": [
"If the council decides not to assess, reg 4(1) separately requires that notice within 6 weeks and lists no exceptions. The reg 5(4) exceptions refer only to the reg 5(1) limit, so on the wording a refusal is still due by this date. Whether a court would read an exception into reg 4(1) is not settled."
],
"action": null,
"short": "Council's decision on whether to assess due",
"quiet": false,
"warn_days": 14,
"anchor": null,
"sources": [
{
"cite": "SEND Regulations 2014, reg 5(1)",
"url": "https://www.legislation.gov.uk/uksi/2014/1530/regulation/5",
"status": "statute",
"status_label": "Law (Act or Regulations)"
},
{
"cite": "SEND Regulations 2014, reg 4(1)",
"url": "https://www.legislation.gov.uk/uksi/2014/1530/regulation/4",
"status": "statute",
"status_label": "Law (Act or Regulations)"
},
{
"cite": "Children and Families Act 2014, s 36(4)",
"url": "https://www.legislation.gov.uk/ukpga/2014/6/section/36",
"status": "statute",
"status_label": "Law (Act or Regulations)"
},
{
"cite": "Children and Families Act 2014, s 36(5)",
"url": "https://www.legislation.gov.uk/ukpga/2014/6/section/36",
"status": "statute",
"status_label": "Law (Act or Regulations)"
}
],
"confidence": "high",
"verify": null
}
],
"groups": [
{
"group": "council",
"title": "The council's dates",
"items": [
{
"id": "assessment_decision",
"instance_key": "dl1_8a9cb206e9a73411",
"rule_id": "assessment_decision",
"title": "Council decides whether to assess",
"stage": "deciding_to_assess",
"owner": "council",
"group": "council",
"who": "The council",
"kind": "duty",
"status": "due_soon",
"status_class": "pending",
"status_label": "Due soon",
"due_date": "2026-10-26",
"due_time": null,
"days_remaining": 14,
"due_range": null,
"started_by": {
"type": "request_received",
"date": "2026-09-14",
"label": "The council received the request for an EHC needs assessment",
"date_basis": "received",
"approximate": false
},
"counted_from": "2026-09-14",
"done_date": null,
"done_timing": null,
"shown_by": null,
"days_late": null,
"message": "Due by 26 October 2026 (14 days from today).",
"what": "The council must tell the family whether it will carry out an EHC needs assessment, and give reasons if it will not.",
"counting": "As soon as practicable, and in any case within 6 weeks of the day the council received the request, or the child or young person was brought to its attention: the same day of the week, 6 weeks later.",
"counting_rule": {
"unit": "weeks",
"n": 6,
"phrase": "within",
"anchor_text": "the day the council received the request, or the child or young person was brought to its attention",
"anchor_basis": "received",
"inclusive_start": false,
"direction": "after",
"outer_limit": "as_soon_as_practicable",
"end_adjust": null
},
"if_missed": null,
"after_closed": null,
"exceptions": [
{
"id": "school_closure",
"label": "Advice was asked of a school, college or early years setting during a closure of at least 4 weeks (the period from 1 week before it closed to 1 week before it reopened)",
"regulation": "reg 5(4)"
},
{
"id": "personal_circumstances",
"label": "Exceptional personal circumstances affected the child, parent or young person",
"regulation": "reg 5(4)"
},
{
"id": "absence_4_weeks",
"label": "The child, parent or young person was away from the council's area for at least 4 weeks in a row",
"regulation": "reg 5(4)"
}
],
"exception_relied_on": null,
"exception_note": "If the council relies on reg 5(4): the fixed date stops applying only where meeting it is impractical for a listed reason, and the duty to act as soon as practicable remains.",
"approximate": false,
"cautions": [
"If the council decides not to assess, reg 4(1) separately requires that notice within 6 weeks and lists no exceptions. The reg 5(4) exceptions refer only to the reg 5(1) limit, so on the wording a refusal is still due by this date. Whether a court would read an exception into reg 4(1) is not settled."
],
"action": null,
"short": "Council's decision on whether to assess due",
"quiet": false,
"warn_days": 14,
"anchor": null,
"sources": [
{
"cite": "SEND Regulations 2014, reg 5(1)",
"url": "https://www.legislation.gov.uk/uksi/2014/1530/regulation/5",
"status": "statute",
"status_label": "Law (Act or Regulations)"
},
{
"cite": "SEND Regulations 2014, reg 4(1)",
"url": "https://www.legislation.gov.uk/uksi/2014/1530/regulation/4",
"status": "statute",
"status_label": "Law (Act or Regulations)"
},
{
"cite": "Children and Families Act 2014, s 36(4)",
"url": "https://www.legislation.gov.uk/ukpga/2014/6/section/36",
"status": "statute",
"status_label": "Law (Act or Regulations)"
},
{
"cite": "Children and Families Act 2014, s 36(5)",
"url": "https://www.legislation.gov.uk/ukpga/2014/6/section/36",
"status": "statute",
"status_label": "Law (Act or Regulations)"
}
],
"confidence": "high",
"verify": null
}
]
}
],
"rights_sources": [
{
"cite": "Children and Families Act 2014, s 83(2)",
"url": "https://www.legislation.gov.uk/ukpga/2014/6/section/83",
"status": "statute"
},
{
"cite": "Education Act 1996, s 8(3) and (4)",
"url": "https://www.legislation.gov.uk/ukpga/1996/56/section/8",
"status": "statute"
},
{
"cite": "Education (School Leaving Date) Order 1997, art 2",
"url": "https://www.legislation.gov.uk/uksi/1997/1970/article/2",
"status": "statute",
"verify": "Art 2 was read in a secondary source, not on legislation.gov.uk, which could not be opened on 1 October 2026: the school leaving date \"shall be the last Friday in June\". Still to confirm the text on legislation.gov.uk."
},
{
"cite": "Children and Families Act 2014, s 80",
"url": "https://www.legislation.gov.uk/ukpga/2014/6/section/80",
"status": "statute"
},
{
"cite": "Children and Families Act 2014, s 80(6)",
"url": "https://www.legislation.gov.uk/ukpga/2014/6/section/80",
"status": "statute"
},
{
"cite": "SEND Regulations 2014, reg 64(1)",
"url": "https://www.legislation.gov.uk/uksi/2014/1530/regulation/64",
"status": "statute"
},
{
"cite": "SEND Regulations 2014, reg 64(2)",
"url": "https://www.legislation.gov.uk/uksi/2014/1530/regulation/64",
"status": "statute"
},
{
"cite": "Mental Capacity Act 2005, s 1(5)",
"url": "https://www.legislation.gov.uk/ukpga/2005/9/section/1",
"status": "statute"
},
{
"cite": "SEND Code of Practice 2015, Annex 1: Mental Capacity, the five key principles (best interests)",
"url": "https://assets.publishing.service.gov.uk/media/5a7dcb85ed915d2ac884d995/SEND_Code_of_Practice_January_2015.pdf",
"status": "code_must"
},
{
"cite": "Mental Capacity Act 2005, s 2",
"url": "https://www.legislation.gov.uk/ukpga/2005/9/section/2",
"status": "statute"
},
{
"cite": "Mental Capacity Act 2005, s 3",
"url": "https://www.legislation.gov.uk/ukpga/2005/9/section/3",
"status": "statute"
},
{
"cite": "Mental Capacity Act 2005, s 4(4)",
"url": "https://www.legislation.gov.uk/ukpga/2005/9/section/4",
"status": "statute",
"verify": "Still to confirm that s 4(4) (permit and encourage the person to take part) applies to a representative acting under CFA 2014 s 80 and the SEND Regulations 2014 on young people who lack capacity, not only to a best-interests decision made under the Mental Capacity Act."
}
],
"deemed_service_sources": [],
"post16_if": [],
"undated_answered": [],
"plan_ceased_planned": null
}
}
From the tool registry
The seven tools
Each tool also has its own page on this site, which works without JavaScript.
- Next stepsehcp_next_steps · POST /api/v1/tools/next_stepsExplains each stage, from asking for an assessment to the Tribunal: who decides, the time limits and what to get ready.
- Deadlinesehcp_calculate_deadlines · POST /api/v1/tools/calculate_deadlinesWorks out the time limits from the dates you give, and shows whose date each one is.
- Check a planehcp_check_plan · POST /api/v1/tools/check_planChecks a draft or final EHC plan, section by section, against the law and the SEND Code of Practice.
- Check wordingehcp_check_wording · POST /api/v1/tools/check_wordingChecks one piece of wording: what the help is, how often, for how long and who gives it.
- Ways to challengeehcp_challenge_options · POST /api/v1/tools/challenge_optionsSets out each way to challenge a decision side by side, with its time limit, without choosing one for you.
- Check a letterehcp_check_letter · POST /api/v1/tools/check_letterChecks a letter from the local authority for the things the law says that kind of letter must include, and for good practice.
- Explain a termehcp_explain · POST /api/v1/tools/explainExplains EHCP words and rules in plain English, with where they come from.
Before you build
Limits and privacy
- A request body can be up to 400 KB. A plan check reads up to 30,000 characters of plan text: send Section F first if a plan is longer. A wording check reads up to 4,000 characters, or up to 40 items, 12,000 characters in all. A letter check reads up to 12,000 characters.
- There is no key, no sign-in and no cookie. Any website can call the API from the browser (CORS is open).
- Connectors set up earlier can keep using
https://, the same MCP server at its older address.plenda.co.uk /mcp/agents - The API logs only the tool name, the status and the time taken. Plenda keeps no copy of what you send.
- Take out names, dates of birth and other details before you send anything. Use [CHILD], [SCHOOL] and [PARENT] instead.
Using the tools well
- Send only the dates you have. The result says which dates it needs.
- Show
summary_for_userandkeep_wordingword for word. - Show the sources with each date or check, and keep the wording neutral. Plenda does not take sides.
- England only. Wales, Scotland and Northern Ireland have different systems.
Read the privacy notice and the terms of use.
Plans for the Rules API
The public REST API and the MCP server stay free. Plans with keys and higher limits are in development.