{"info":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","description":"<html><head></head><body><h1 id=\"eyworks-public-api\"><strong>eyworks Public API</strong></h1>\n<p>The eyworks Public API provides secure, authenticated access to selected data in the eyworks platform for customer integrations, reporting, business intelligence tools and connected applications.</p>\n<h2 id=\"before-you-start\"><strong>Before you start</strong></h2>\n<p>You will need:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Requirement</th>\n<th>Details</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>API licence</td>\n<td>An active API licence for each nursery you want to connect.</td>\n</tr>\n<tr>\n<td>API credentials</td>\n<td>A <code>clientId</code> and <code>clientSecret</code> issued by eyworks.</td>\n</tr>\n<tr>\n<td>Tenant address</td>\n<td>Your organisation's eyworks tenant address.</td>\n</tr>\n<tr>\n<td>Technical setup</td>\n<td>A system or technical team to make the API requests.</td>\n</tr>\n</tbody>\n</table>\n</div><p>API credentials are issued for your tenant and are limited to the nurseries and permissions covered by your licence.</p>\n<h2 id=\"request-api-access\"><strong>Request API access</strong></h2>\n<p>Once your API licence is active, the eyworks support team can generate your tenant-specific integration credentials.</p>\n<p>To discuss API licensing or arrange a licence, email <a href=\"mailto:sales@eyworks.co.uk\">sales@eyworks.co.uk</a>. For credentials, onboarding or technical questions, contact <a href=\"mailto:support@eyworks.co.uk\">support@eyworks.co.uk</a>.</p>\n<h2 id=\"set-up-the-collection\"><strong>Set up the collection</strong></h2>\n<p>Fork or import this collection into your own Postman workspace and set these values locally:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Variable</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>baseUrl</code></td>\n<td>Your tenant address, for example <code>https://your-tenant.eylog.co.uk</code></td>\n</tr>\n<tr>\n<td><code>clientId</code></td>\n<td>The client ID issued by eyworks.</td>\n</tr>\n<tr>\n<td><code>clientSecret</code></td>\n<td>The client secret issued by eyworks.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Do not add a trailing slash to <code>baseUrl</code>. The collection does not include customer credentials or a shared environment.</p>\n<h2 id=\"get-an-access-token\"><strong>Get an access token</strong></h2>\n<ol>\n<li>Set your local <code>baseUrl</code>, <code>clientId</code> and <code>clientSecret</code> values.</li>\n<li>Open <strong>Auth &gt; Create Token (Client Credentials)</strong>.</li>\n<li>Send the request.</li>\n<li>The collection saves the returned access and refresh tokens locally in your Postman environment.</li>\n<li>Use the access token for protected requests.</li>\n</ol>\n<p>The token endpoint is:</p>\n<p><code>POST /public/v1/oauth/token</code></p>\n<p>Use the returned token in the following header:</p>\n<p><code>Authorization: Bearer &lt;accessToken&gt;</code></p>\n<p>When the access token expires, use <strong>Auth &gt; Refresh Token</strong>. Refresh tokens are single-use and are rotated when refreshed.</p>\n<h2 id=\"api-scopes\"><strong>API scopes</strong></h2>\n<p>Your client is assigned scopes that control which areas of the API it can use:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Scope</th>\n<th>Access</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>company:read</code></td>\n<td>Company data.</td>\n</tr>\n<tr>\n<td><code>nurseries:read</code></td>\n<td>Nursery data, rooms, sessions and company nursery lists.</td>\n</tr>\n<tr>\n<td><code>employee:read</code></td>\n<td>Employee data, qualifications and training.</td>\n</tr>\n<tr>\n<td><code>children:read</code></td>\n<td>Child data.</td>\n</tr>\n<tr>\n<td><code>enquiries:read</code></td>\n<td>Enquiry data and enquiry lookup values.</td>\n</tr>\n<tr>\n<td><code>enquiries:write</code></td>\n<td>Submit enquiries.</td>\n</tr>\n<tr>\n<td><code>availability:read</code></td>\n<td>Nursery availability data.</td>\n</tr>\n<tr>\n<td><code>financials:read</code></td>\n<td>Child financial data.</td>\n</tr>\n</tbody>\n</table>\n</div><p>The scopes assigned to your client are included in the token response. A scope does not provide access to every nursery; your client can only access the nurseries covered by your licence and configuration. A request that requires an unassigned scope returns <code>403 Forbidden</code>.</p>\n<h2 id=\"response-format\"><strong>Response format</strong></h2>\n<p>Every response uses the standard envelope:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": {},\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<p>Collection endpoints return an array in <code>data</code>; detail endpoints return an object. Error responses use <code>status: false</code> and include a client-safe message.</p>\n<h2 id=\"pagination\"><strong>Pagination</strong></h2>\n<p>Collection endpoints support <code>page</code> and <code>pageSize</code>.</p>\n<ul>\n<li><code>page</code> starts at 1.</li>\n<li><code>pageSize</code> defaults to 50 and accepts values from 1 to 100.</li>\n<li>Pagination details are returned under <code>metadata.pagination</code>.</li>\n<li>Financial collections also return <code>metadata.snapshotAt</code>; use the same filters when retrieving all pages.</li>\n</ul>\n<h2 id=\"identifiers\"><strong>Identifiers</strong></h2>\n<p>Use the public GUIDs returned by the API in subsequent requests. Do not use internal database IDs or try to guess identifiers.</p>\n<h2 id=\"run-the-collection-in-postman\"><strong>Run the collection in Postman</strong></h2>\n<p>Use the built-in <strong>Run in Postman</strong> option to fork or import this collection into your own workspace. Enter your tenant-specific values locally before sending requests.</p>\n<h2 id=\"api-updates\"><strong>API updates</strong></h2>\n<p>New capabilities are added to the eyworks Public API over time. The latest available capabilities are:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Available from</th>\n<th>Area</th>\n<th>Capability</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>18 August 2026</td>\n<td>Enquiries</td>\n<td>Create an enquiry for a nursery using <code>POST /nurseries/{guid}/enquiries</code>.</td>\n</tr>\n<tr>\n<td>18 August 2026</td>\n<td>Nursery settings</td>\n<td>Retrieve enquiry lookup values and available sessions to support nursery integrations.</td>\n</tr>\n<tr>\n<td>18 August 2026</td>\n<td>Nursery availability</td>\n<td>Retrieve nursery availability using <code>GET /nurseries/{guid}/availability</code>. If no segment is supplied, the response uses a nursery-level breakdown.</td>\n</tr>\n<tr>\n<td>9 September 2026</td>\n<td>Child financials</td>\n<td>Retrieve child financial summaries, invoices, payments, credits and transactions.</td>\n</tr>\n<tr>\n<td>13 October 2026</td>\n<td>Enquiry financials</td>\n<td>Retrieve pre-enrolment enquiry invoices using <code>GET /enquiries/{enquiryGuid}/financials/invoices</code> and <code>GET /enquiries/{enquiryGuid}/financials/invoices/{invoiceGuid}</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"need-help\"><strong>Need help?</strong></h2>\n<p>For API licensing or licence agreements, email <a href=\"mailto:sales@eyworks.co.uk\">sales@eyworks.co.uk</a>. For credentials, onboarding or technical questions, email <a href=\"mailto:support@eyworks.co.uk\">support@eyworks.co.uk</a>.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"eyworks Public API","slug":"eyworks-public-api"}],"owner":"30375394","collectionId":"61a47545-1c31-4934-a301-acf2669e0faf","publishedId":"2sBYAq1tfD","public":true,"customColor":{"right-sidebar":"#FFFFFF","highlight":"#FF6C37","top-bar":"#FFFFFF"},"publishDate":"2026-10-13T21:24:33.000Z"},"item":[{"name":"Auth","item":[{"name":"Create Token (Client Credentials)","event":[{"script":{"id":"1b3d8554-4af9-466b-9530-e5dbda48701a","exec":["pm.test('Status code is 200', function () {","  pm.response.to.have.status(200);","});","","const json = pm.response.json();","","if (!json || !json.data) {","  throw new Error('Invalid OAuth token response');","}","","if (json.data.accessToken) {","  pm.environment.set('accessToken', json.data.accessToken);","}","","if (json.data.refreshToken) {","  pm.environment.set('refreshToken', json.data.refreshToken);","}","","if (json.data.expiresIn) {","  pm.environment.set(","    'accessTokenExpiresAt',","    (Date.now() + json.data.expiresIn * 1000).toString()","  );","}","","if (json.data.refreshExpiresIn) {","  pm.environment.set(","    'refreshTokenExpiresAt',","    (Date.now() + json.data.refreshExpiresIn * 1000).toString()","  );","}","","console.log('OAuth tokens updated in Environment');","pm.collectionVariables.set(\"accessToken\", json.data.accessToken);","pm.collectionVariables.set(\"refreshToken\", json.data.refreshToken);"],"type":"text/javascript","packages":{},"requests":{}},"listen":"test"}],"id":"d59ab77c-661d-4d5c-9576-32c1b2fbdc18","request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"grantType\": \"client_credentials\",\n  \"clientId\": \"\",\n  \"clientSecret\": \"\"\n}"},"url":"https://your-tenant.eylog.co.uk/public/v1/oauth/token","description":"<p>Issues an access token and refresh token for your API client.</p>\n<p>Request body:</p>\n<ul>\n<li><p>grantType: <code>client_credentials</code></p>\n</li>\n<li><p>clientId: issued by eyworks Limited</p>\n</li>\n<li><p>clientSecret: issued by eyworks Limited</p>\n</li>\n</ul>\n<p>Success response (<code>200</code>) includes:</p>\n<ul>\n<li><p><code>data.accessToken</code></p>\n</li>\n<li><p><code>data.refreshToken</code></p>\n</li>\n<li><p><code>data.expiresIn</code></p>\n</li>\n<li><p><code>data.refreshExpiresIn</code></p>\n</li>\n<li><p><code>data.scope</code></p>\n</li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": {\n    \"accessToken\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9....\",\n    \"expiresIn\": 3600,\n    \"refreshToken\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.....\",\n    \"refreshExpiresIn\": 2592000,\n    \"scope\": [\n      \"company:read\",\n      \"nurseries:read\",\n      \"employee:read\",\n      \"children:read\",\n      \"enquiries:read\",\n      \"enquiries:write\",\n      \"availability:read\"\n    ]\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n<h3 id=\"error-401\"><strong>Error (401)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 401,\n  \"message\": \"Unauthorized\",\n  \"errors\": [\n    \"Invalid client credentials.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n","urlObject":{"path":["public/v1","oauth","token"],"host":["https://your-tenant.eylog.co.uk"],"query":[],"variable":[]}},"response":[],"_postman_id":"d59ab77c-661d-4d5c-9576-32c1b2fbdc18"},{"name":"Refresh Token","event":[{"script":{"type":"text/javascript","requests":[],"packages":[],"exec":["pm.test('Status code is 200', function () {","  pm.response.to.have.status(200);","});","","const json = pm.response.json();","","if (!json || !json.data) {","  throw new Error('Invalid OAuth token response');","}","","if (json.data.accessToken) {","  pm.environment.set('accessToken', json.data.accessToken);","}","","if (json.data.refreshToken) {","  pm.environment.set('refreshToken', json.data.refreshToken);","}","","if (json.data.expiresIn) {","  pm.environment.set(","    'accessTokenExpiresAt',","    (Date.now() + json.data.expiresIn * 1000).toString()","  );","}","","if (json.data.refreshExpiresIn) {","  pm.environment.set(","    'refreshTokenExpiresAt',","    (Date.now() + json.data.refreshExpiresIn * 1000).toString()","  );","}","","console.log('OAuth tokens updated in Environment');","pm.collectionVariables.set(\"accessToken\", json.data.accessToken);","pm.collectionVariables.set(\"refreshToken\", json.data.refreshToken);","        \"financials:read\","]},"listen":"test"}],"id":"01435be9-936b-4bd8-8832-4ae012464e89","request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"grantType\": \"refresh_token\",\n  \"refreshToken\": \"\"\n}"},"url":"https://your-tenant.eylog.co.uk/public/v1/oauth/token","description":"<p>Rotates the token session and returns a fresh access+refresh token pair.</p>\n<p>Request body:</p>\n<ul>\n<li>grantType: <code>refresh_token</code></li>\n<li>refreshToken: previous refresh token</li>\n</ul>\n<p>Use this when access token expires. Save returned tokens and replace the old values.</p>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": {\n    \"accessToken\": \"&lt;access-token&gt;\",\n    \"expiresIn\": 3600,\n    \"refreshToken\": \"&lt;refresh-token&gt;\",\n    \"refreshExpiresIn\": 2592000,\n    \"scope\": [\n      \"company:read\"\n    ]\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-401\"><strong>Error (401)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 401,\n  \"message\": \"Unauthorized\",\n  \"errors\": [\n    \"Invalid or expired credentials.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","urlObject":{"path":["public/v1","oauth","token"],"host":["https://your-tenant.eylog.co.uk"],"query":[],"variable":[]}},"response":[],"_postman_id":"01435be9-936b-4bd8-8832-4ae012464e89"}],"id":"18e77573-61a3-4b94-be12-434b4d151cca","_postman_id":"18e77573-61a3-4b94-be12-434b4d151cca","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}}},{"name":"Companies","item":[{"name":"List Companies","id":"73a282b9-5b69-4670-9946-3f5c8167b83c","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/companies?page=1&pageSize=25","description":"<p>Returns paginated company records available to your API client.</p>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>page</code></td>\n<td>No</td>\n<td>One-based page number. Defaults to <code>1</code>.</td>\n<td>Positive integer (<code>1</code> or greater).</td>\n</tr>\n<tr>\n<td><code>pageSize</code></td>\n<td>No</td>\n<td>Number of records per page. Defaults to <code>50</code>.</td>\n<td>Integer from <code>1</code> to <code>100</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Response:</p>\n<ul>\n<li><p><code>data</code></p>\n</li>\n<li><p><code>metadata.pagination</code></p>\n</li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"11111111-1111-4111-8111-111111111111\",\n      \"name\": \"eyworks Nursery Group\",\n      \"address\": {\n        \"address1\": \"Example Street\",\n        \"address2\": \"Example Town\",\n        \"postcode\": \"EX1 1AB\"\n      },\n      \"city\": \"Example Town\",\n      \"county\": \"Bucks\",\n      \"country\": \"United Kingdom\",\n      \"brandingColour\": \"#BFBD34\",\n      \"legal\": {\n        \"registrationNumber\": \"07939645\",\n        \"vatNumber\": \"\"\n      },\n      \"contact\": {\n        \"email\": \"customer@example.com\",\n        \"telephone\": \"+44 7700 900000\",\n        \"website\": \"https://www.eyworks.co.uk \"\n      }\n    }\n  ],\n  \"metadata\": {\n    \"pagination\": {\n      \"page\": 1,\n      \"pageSize\": 25,\n      \"total\": 1,\n      \"hasNext\": false\n    }\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","companies"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>One-based page number. Defaults to <code>1</code>. Possible values: Positive integer (<code>1</code> or greater).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Number of records per page. Defaults to <code>50</code>. Possible values: Integer from <code>1</code> to <code>100</code>.</p>\n","type":"text/plain"},"key":"pageSize","value":"25"}],"variable":[]}},"response":[],"_postman_id":"73a282b9-5b69-4670-9946-3f5c8167b83c"},{"name":"Get Company","id":"087e1f21-217e-4ba2-965a-763fbeecd016","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/companies/1","description":"<p>Returns details for a single company in your accessible scope.</p>\n<p>Path params:</p>\n<ul>\n<li>companyId</li>\n</ul>\n<p>Response:</p>\n<ul>\n<li><code>data</code></li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": {\n    \"guid\": \"11111111-1111-4111-8111-111111111111\",\n    \"name\": \"eyworks Nursery Group\",\n    \"address\": {\n      \"address1\": \"Example Street\",\n      \"address2\": \"Example Town\",\n      \"postcode\": \"EX1 1AB\"\n    },\n    \"city\": \"Example Town\",\n    \"county\": \"Bucks\",\n    \"country\": \"United Kingdom\",\n    \"brandingColour\": \"#BFBD34\",\n    \"legal\": {\n      \"registrationNumber\": \"07939645\",\n      \"vatNumber\": \"\"\n    },\n    \"contact\": {\n      \"email\": \"customer@example.com\",\n      \"telephone\": \"+44 7700 900000\",\n      \"website\": \"https://www.eyworks.co.uk \"\n    }\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","companies","1"],"host":["https://your-tenant.eylog.co.uk"],"query":[],"variable":[]}},"response":[],"_postman_id":"087e1f21-217e-4ba2-965a-763fbeecd016"},{"name":"List Company Nurseries","id":"75ec0030-a586-49fb-9d72-0c3c8a28ca11","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/companies/1/nurseries?page=1&pageSize=25","description":"<p>Returns paginated nurseries for a company that is accessible to your client.</p>\n<p>Path params:</p>\n<ul>\n<li>companyId</li>\n</ul>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>page</code></td>\n<td>No</td>\n<td>One-based page number. Defaults to <code>1</code>.</td>\n<td>Positive integer (<code>1</code> or greater).</td>\n</tr>\n<tr>\n<td><code>pageSize</code></td>\n<td>No</td>\n<td>Number of records per page. Defaults to <code>50</code>.</td>\n<td>Integer from <code>1</code> to <code>100</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Response:</p>\n<ul>\n<li><code>data</code></li>\n<li><code>metadata.pagination</code></li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"22222222-2222-4222-8222-222222222222\",\n      \"urn\": \"TT\",\n      \"name\": \"eyworks - Nursery A\",\n      \"address\": {\n        \"address1\": \"Example Street\",\n        \"address2\": \"Example Town\",\n        \"address3\": \"Example County\",\n        \"postcode\": \"EX1 1AB\"\n      },\n      \"city\": \"Example Town\",\n      \"county\": \"Bucks\",\n      \"country\": \"United Kingdom\",\n      \"brandingColour\": \"#BFBD34\",\n      \"contact\": {\n        \"email\": \"customer@example.com\",\n        \"telephone\": \"+44 7700 900000\",\n        \"website\": \"https://www.eyworks.co.uk \"\n      },\n      \"managerName\": \"\",\n      \"tags\": [\n        {\n          \"guid\": \"88888888-8888-4888-8888-888888888888\",\n          \"name\": \"Milton Keynes Group\"\n        }\n      ]\n    }\n  ],\n  \"metadata\": {\n    \"pagination\": {\n      \"page\": 1,\n      \"pageSize\": 25,\n      \"total\": 1,\n      \"hasNext\": false\n    }\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","companies","1","nurseries"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>One-based page number. Defaults to <code>1</code>. Possible values: Positive integer (<code>1</code> or greater).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Number of records per page. Defaults to <code>50</code>. Possible values: Integer from <code>1</code> to <code>100</code>.</p>\n","type":"text/plain"},"key":"pageSize","value":"25"}],"variable":[]}},"response":[],"_postman_id":"75ec0030-a586-49fb-9d72-0c3c8a28ca11"}],"id":"5a481c03-f486-48fb-85ce-c75c6949aa97","_postman_id":"5a481c03-f486-48fb-85ce-c75c6949aa97","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}}},{"name":"Nurseries","item":[{"name":"Get Nursery","id":"306fb572-aa47-4f26-bedc-8a02b81f2887","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1","description":"<p>Returns details for one nursery in your accessible scope.</p>\n<p>Path params:</p>\n<ul>\n<li>nurseryId</li>\n</ul>\n<p>Response:</p>\n<ul>\n<li><code>data</code> (nursery object)</li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": {\n    \"guid\": \"22222222-2222-4222-8222-222222222222\",\n    \"urn\": \"TT\",\n    \"name\": \"eyworks - Nursery A\",\n    \"address\": {\n      \"address1\": \"Example Street\",\n      \"address2\": \"Example Town\",\n      \"address3\": \"Example County\",\n      \"postcode\": \"EX1 1AB\"\n    },\n    \"city\": \"Example Town\",\n    \"county\": \"Bucks\",\n    \"country\": \"United Kingdom\",\n    \"brandingColour\": \"#BFBD34\",\n    \"contact\": {\n      \"email\": \"customer@example.com\",\n      \"telephone\": \"+44 7700 900000\",\n      \"website\": \"https://www.eyworks.co.uk \",\n      \"ofstedUrn\": \"EY123456 \"\n    },\n    \"managerName\": \"\",\n    \"capacity\": 50,\n    \"operations\": {\n      \"operationDays\": [\n        \"Monday\",\n        \"Tuesday\",\n        \"Wednesday\",\n        \"Thursday\",\n        \"Friday\"\n      ],\n      \"coreDays\": [\n        \"Monday\",\n        \"Tuesday\",\n        \"Wednesday\",\n        \"Thursday\",\n        \"Friday\"\n      ],\n      \"operationalHours\": {\n        \"start\": \"07:30\",\n        \"end\": \"18:30\"\n      },\n      \"coreHours\": {\n        \"start\": \"08:00\",\n        \"end\": \"18:00\"\n      }\n    },\n    \"tags\": [\n      {\n        \"guid\": \"88888888-8888-4888-8888-888888888888\",\n        \"name\": \"Milton Keynes Group\"\n      }\n    ],\n    \"createdAt\": \"2024-01-23 17:19:53\",\n    \"updatedAt\": \"2024-10-23 22:22:58\"\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1"],"host":["https://your-tenant.eylog.co.uk"],"query":[],"variable":[]}},"response":[],"_postman_id":"306fb572-aa47-4f26-bedc-8a02b81f2887"},{"name":"List Rooms","id":"e378313a-1e6b-4cf6-a536-638e15a9ac75","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1/rooms?page=1&pageSize=25","description":"<p>Returns paginated room records for a nursery.</p>\n<p>Path params:</p>\n<ul>\n<li>nurseryId</li>\n</ul>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>page</code></td>\n<td>No</td>\n<td>One-based page number. Defaults to <code>1</code>.</td>\n<td>Positive integer (<code>1</code> or greater).</td>\n</tr>\n<tr>\n<td><code>pageSize</code></td>\n<td>No</td>\n<td>Number of records per page. Defaults to <code>50</code>.</td>\n<td>Integer from <code>1</code> to <code>100</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Response:</p>\n<ul>\n<li><code>data</code></li>\n<li><code>metadata.pagination</code></li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"66666666-6666-4666-8666-666666666666\",\n      \"name\": \"Baby Room\",\n      \"capacity\": 9,\n      \"ageGroupLower\": 0,\n      \"ageGroupUpper\": 24\n    }\n  ],\n  \"metadata\": {\n    \"pagination\": {\n      \"page\": 1,\n      \"pageSize\": 25,\n      \"total\": 1,\n      \"hasNext\": false\n    }\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1","rooms"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>One-based page number. Defaults to <code>1</code>. Possible values: Positive integer (<code>1</code> or greater).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Number of records per page. Defaults to <code>50</code>. Possible values: Integer from <code>1</code> to <code>100</code>.</p>\n","type":"text/plain"},"key":"pageSize","value":"25"}],"variable":[]}},"response":[],"_postman_id":"e378313a-1e6b-4cf6-a536-638e15a9ac75"},{"name":"List Employees","id":"27123e0f-305b-40e1-b025-b0ae4f3a4563","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1/employees?page=1&pageSize=25","description":"<p>Returns paginated employee records for a nursery.</p>\n<p>Path params:</p>\n<ul>\n<li>nurseryId</li>\n</ul>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>filters[status]</code></td>\n<td>No</td>\n<td>Filter by record status. Defaults to <code>active</code> when omitted.</td>\n<td><code>active</code>, <code>inactive</code>, <code>all</code>.</td>\n</tr>\n<tr>\n<td><code>filters[genders][]</code></td>\n<td>No</td>\n<td>Repeat this parameter to filter by one or more configured gender names.</td>\n<td>Configured gender name, for example <code>male</code> or <code>female</code>.</td>\n</tr>\n<tr>\n<td><code>filters[startDateFrom]</code></td>\n<td>No</td>\n<td>Inclusive lower bound for the start date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>filters[startDateTo]</code></td>\n<td>No</td>\n<td>Inclusive upper bound for the start date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format; must not be before <code>startDateFrom</code>.</td>\n</tr>\n<tr>\n<td><code>filters[leaveDateFrom]</code></td>\n<td>No</td>\n<td>Inclusive lower bound for the leave date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>filters[leaveDateTo]</code></td>\n<td>No</td>\n<td>Inclusive upper bound for the leave date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format; must not be before <code>leaveDateFrom</code>.</td>\n</tr>\n<tr>\n<td><code>filters[dobFrom]</code></td>\n<td>No</td>\n<td>Inclusive lower bound for the date of birth.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>filters[dobTo]</code></td>\n<td>No</td>\n<td>Inclusive upper bound for the date of birth.</td>\n<td>Date in <code>YYYY-MM-DD</code> format; must not be before <code>dobFrom</code>.</td>\n</tr>\n<tr>\n<td><code>page</code></td>\n<td>No</td>\n<td>One-based page number. Defaults to <code>1</code>.</td>\n<td>Positive integer (<code>1</code> or greater).</td>\n</tr>\n<tr>\n<td><code>pageSize</code></td>\n<td>No</td>\n<td>Number of records per page. Defaults to <code>50</code>.</td>\n<td>Integer from <code>1</code> to <code>100</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Response:</p>\n<ul>\n<li><code>data</code></li>\n<li><code>metadata.pagination</code></li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"33333333-3333-4333-8333-333333333333\",\n      \"urn\": \"TT012EMPLOYEE\",\n      \"nursery\": {\n        \"guid\": \"22222222-2222-4222-8222-222222222222\",\n        \"name\": \"eyworks - Nursery A\"\n      },\n      \"firstName\": \"Example\",\n      \"lastName\": \"Customer\",\n      \"fullName\": \"Example Record\",\n      \"primaryEmail\": \"customer@example.com\",\n      \"startDate\": \"2024-01-01\",\n      \"leaveDate\": null,\n      \"status\": \"active\",\n      \"createdAt\": \"2025-01-18 23:41:50\",\n      \"updatedAt\": \"2025-01-18 23:43:50\"\n    }\n  ],\n  \"metadata\": {\n    \"pagination\": {\n      \"page\": 1,\n      \"pageSize\": 25,\n      \"total\": 1,\n      \"hasNext\": false\n    }\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1","employees"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>Filter by record status. Defaults to <code>active</code> when omitted. Possible values: <code>active</code>, <code>inactive</code>, <code>all</code>.</p>\n","type":"text/plain"},"key":"filters[status]","value":"active"},{"disabled":true,"description":{"content":"<p>Repeat this parameter to filter by one or more configured gender names. Possible values: Configured gender name, for example <code>male</code> or <code>female</code>.</p>\n","type":"text/plain"},"key":"filters[genders][]","value":"female"},{"disabled":true,"description":{"content":"<p>Inclusive lower bound for the start date. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"filters[startDateFrom]","value":"2026-01-01"},{"disabled":true,"description":{"content":"<p>Inclusive upper bound for the start date. Possible values: Date in <code>YYYY-MM-DD</code> format; must not be before <code>startDateFrom</code>.</p>\n","type":"text/plain"},"key":"filters[startDateTo]","value":"2026-01-31"},{"disabled":true,"description":{"content":"<p>Inclusive lower bound for the leave date. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"filters[leaveDateFrom]","value":"2026-01-01"},{"disabled":true,"description":{"content":"<p>Inclusive upper bound for the leave date. Possible values: Date in <code>YYYY-MM-DD</code> format; must not be before <code>leaveDateFrom</code>.</p>\n","type":"text/plain"},"key":"filters[leaveDateTo]","value":"2026-01-31"},{"disabled":true,"description":{"content":"<p>Inclusive lower bound for the date of birth. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"filters[dobFrom]","value":"2020-01-01"},{"disabled":true,"description":{"content":"<p>Inclusive upper bound for the date of birth. Possible values: Date in <code>YYYY-MM-DD</code> format; must not be before <code>dobFrom</code>.</p>\n","type":"text/plain"},"key":"filters[dobTo]","value":"2022-12-31"},{"disabled":true,"description":{"content":"<p>One-based page number. Defaults to <code>1</code>. Possible values: Positive integer (<code>1</code> or greater).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Number of records per page. Defaults to <code>50</code>. Possible values: Integer from <code>1</code> to <code>100</code>.</p>\n","type":"text/plain"},"key":"pageSize","value":"25"}],"variable":[]}},"response":[],"_postman_id":"27123e0f-305b-40e1-b025-b0ae4f3a4563"},{"name":"List Children","id":"e3d68a52-79b5-4b4e-97c6-9d803fd7fbcc","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1/children?page=1&pageSize=25","description":"<p>Returns paginated children records for a nursery.</p>\n<p>Path params:</p>\n<ul>\n<li>nurseryId</li>\n</ul>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>filters[status]</code></td>\n<td>No</td>\n<td>Filter by record status. Defaults to <code>active</code> when omitted.</td>\n<td><code>active</code>, <code>inactive</code>, <code>all</code>.</td>\n</tr>\n<tr>\n<td><code>filters[genders][]</code></td>\n<td>No</td>\n<td>Repeat this parameter to filter by one or more configured gender names.</td>\n<td>Configured gender name, for example <code>male</code> or <code>female</code>.</td>\n</tr>\n<tr>\n<td><code>filters[startDateFrom]</code></td>\n<td>No</td>\n<td>Inclusive lower bound for the start date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>filters[startDateTo]</code></td>\n<td>No</td>\n<td>Inclusive upper bound for the start date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format; must not be before <code>startDateFrom</code>.</td>\n</tr>\n<tr>\n<td><code>filters[leaveDateFrom]</code></td>\n<td>No</td>\n<td>Inclusive lower bound for the leave date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>filters[leaveDateTo]</code></td>\n<td>No</td>\n<td>Inclusive upper bound for the leave date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format; must not be before <code>leaveDateFrom</code>.</td>\n</tr>\n<tr>\n<td><code>filters[dobFrom]</code></td>\n<td>No</td>\n<td>Inclusive lower bound for the date of birth.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>filters[dobTo]</code></td>\n<td>No</td>\n<td>Inclusive upper bound for the date of birth.</td>\n<td>Date in <code>YYYY-MM-DD</code> format; must not be before <code>dobFrom</code>.</td>\n</tr>\n<tr>\n<td><code>page</code></td>\n<td>No</td>\n<td>One-based page number. Defaults to <code>1</code>.</td>\n<td>Positive integer (<code>1</code> or greater).</td>\n</tr>\n<tr>\n<td><code>pageSize</code></td>\n<td>No</td>\n<td>Number of records per page. Defaults to <code>50</code>.</td>\n<td>Integer from <code>1</code> to <code>100</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Response:</p>\n<ul>\n<li><p><code>data</code></p>\n</li>\n<li><p><code>metadata.pagination</code></p>\n</li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"44444444-4444-4444-8444-444444444444\",\n      \"urn\": \"TT027CHILD\",\n      \"nursery\": {\n        \"guid\": \"22222222-2222-4222-8222-222222222222\",\n        \"name\": \"eyworks - Nursery A\"\n      },\n      \"firstName\": \"Example\",\n      \"lastName\": \"Customer\",\n      \"fullName\": \"Example Record\",\n      \"dob\": \"2022-11-03\",\n      \"startDate\": \"2023-09-01\",\n      \"leaveDate\": \"2027-08-31\",\n      \"status\": \"active\",\n      \"createdAt\": null,\n      \"updatedAt\": \"2025-11-03 03:07:30\"\n    }\n  ],\n  \"metadata\": {\n    \"pagination\": {\n      \"page\": 1,\n      \"pageSize\": 25,\n      \"total\": 1,\n      \"hasNext\": false\n    }\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1","children"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>Filter by record status. Defaults to <code>active</code> when omitted. Possible values: <code>active</code>, <code>inactive</code>, <code>all</code>.</p>\n","type":"text/plain"},"key":"filters[status]","value":"active"},{"disabled":true,"description":{"content":"<p>Repeat this parameter to filter by one or more configured gender names. Possible values: Configured gender name, for example <code>male</code> or <code>female</code>.</p>\n","type":"text/plain"},"key":"filters[genders][]","value":"female"},{"disabled":true,"description":{"content":"<p>Inclusive lower bound for the start date. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"filters[startDateFrom]","value":"2026-01-01"},{"disabled":true,"description":{"content":"<p>Inclusive upper bound for the start date. Possible values: Date in <code>YYYY-MM-DD</code> format; must not be before <code>startDateFrom</code>.</p>\n","type":"text/plain"},"key":"filters[startDateTo]","value":"2026-01-31"},{"disabled":true,"description":{"content":"<p>Inclusive lower bound for the leave date. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"filters[leaveDateFrom]","value":"2026-01-01"},{"disabled":true,"description":{"content":"<p>Inclusive upper bound for the leave date. Possible values: Date in <code>YYYY-MM-DD</code> format; must not be before <code>leaveDateFrom</code>.</p>\n","type":"text/plain"},"key":"filters[leaveDateTo]","value":"2026-01-31"},{"disabled":true,"description":{"content":"<p>Inclusive lower bound for the date of birth. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"filters[dobFrom]","value":"2020-01-01"},{"disabled":true,"description":{"content":"<p>Inclusive upper bound for the date of birth. Possible values: Date in <code>YYYY-MM-DD</code> format; must not be before <code>dobFrom</code>.</p>\n","type":"text/plain"},"key":"filters[dobTo]","value":"2022-12-31"},{"disabled":true,"description":{"content":"<p>One-based page number. Defaults to <code>1</code>. Possible values: Positive integer (<code>1</code> or greater).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Number of records per page. Defaults to <code>50</code>. Possible values: Integer from <code>1</code> to <code>100</code>.</p>\n","type":"text/plain"},"key":"pageSize","value":"25"}],"variable":[]}},"response":[],"_postman_id":"e3d68a52-79b5-4b4e-97c6-9d803fd7fbcc"},{"name":"List Enquiries","id":"a8e37fa5-8345-45a3-9f64-05191b18ac2d","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1/enquiries?page=1&pageSize=25","description":"<p>Returns paginated enquiries for a nursery.</p>\n<p>Path params:</p>\n<ul>\n<li>nurseryId</li>\n</ul>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>filters[enquiryDate]</code></td>\n<td>No</td>\n<td>Return enquiries created on this date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>filters[status][]</code></td>\n<td>No</td>\n<td>Repeat this parameter to filter by one or more enquiry lifecycle statuses.</td>\n<td><code>ENROLLED</code>, <code>LOST</code>, <code>NOT_ENROLLED</code>, <code>WAITLISTED</code>.</td>\n</tr>\n<tr>\n<td><code>filters[stage][]</code></td>\n<td>No</td>\n<td>Repeat this parameter to filter by one or more enquiry stages.</td>\n<td><code>ENQUIRY_IN</code>, <code>PRE_VISIT_FOLLOW_UP</code>, <code>VISIT</code>, <code>POST_VISIT_FOLLOW_UP</code>, <code>WAITLISTED</code>, <code>REGISTRATION_FORM</code>.</td>\n</tr>\n<tr>\n<td><code>page</code></td>\n<td>No</td>\n<td>One-based page number. Defaults to <code>1</code>.</td>\n<td>Positive integer (<code>1</code> or greater).</td>\n</tr>\n<tr>\n<td><code>pageSize</code></td>\n<td>No</td>\n<td>Number of records per page. Defaults to <code>50</code>.</td>\n<td>Integer from <code>1</code> to <code>100</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Response:</p>\n<ul>\n<li><p><code>data</code></p>\n</li>\n<li><p><code>metadata.pagination</code></p>\n</li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"55555555-5555-4555-8555-555555555555\",\n      \"nursery\": {\n        \"guid\": \"22222222-2222-4222-8222-222222222222\",\n        \"name\": \"eyworks - Nursery A\"\n      },\n      \"parentName\": \"Example Parent\",\n      \"parentEmail\": \"customer@example.com\",\n      \"childName\": \"Example Child\",\n      \"childDob\": null,\n      \"childStartDate\": null,\n      \"stage\": \"ENQUIRY_IN\",\n      \"status\": \"NOT_ENROLLED\",\n      \"createdAt\": \"2026-02-23 16:52:54\",\n      \"updatedAt\": null\n    }\n  ],\n  \"metadata\": {\n    \"pagination\": {\n      \"page\": 1,\n      \"pageSize\": 25,\n      \"total\": 1,\n      \"hasNext\": false\n    }\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1","enquiries"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>Return enquiries created on this date. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"filters[enquiryDate]","value":"2026-02-23"},{"disabled":true,"description":{"content":"<p>Repeat this parameter to filter by one or more enquiry lifecycle statuses. Possible values: <code>ENROLLED</code>, <code>LOST</code>, <code>NOT_ENROLLED</code>, <code>WAITLISTED</code>.</p>\n","type":"text/plain"},"key":"filters[status][]","value":"NOT_ENROLLED"},{"disabled":true,"description":{"content":"<p>Repeat this parameter to filter by one or more enquiry stages. Possible values: <code>ENQUIRY_IN</code>, <code>PRE_VISIT_FOLLOW_UP</code>, <code>VISIT</code>, <code>POST_VISIT_FOLLOW_UP</code>, <code>WAITLISTED</code>, <code>REGISTRATION_FORM</code>.</p>\n","type":"text/plain"},"key":"filters[stage][]","value":"ENQUIRY_IN"},{"disabled":true,"description":{"content":"<p>One-based page number. Defaults to <code>1</code>. Possible values: Positive integer (<code>1</code> or greater).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Number of records per page. Defaults to <code>50</code>. Possible values: Integer from <code>1</code> to <code>100</code>.</p>\n","type":"text/plain"},"key":"pageSize","value":"25"}],"variable":[]}},"response":[],"_postman_id":"a8e37fa5-8345-45a3-9f64-05191b18ac2d"},{"name":"List Sessions","id":"53a3e914-6864-441e-a589-682dd7ca4576","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1/sessions","description":"<p>Returns active general sessions for a nursery. Requires <code>nurseries:read</code>. Use <code>type=enquiry</code> or <code>type=registration</code> to match the corresponding web form. The result is unpaginated.</p>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>type</code></td>\n<td>No</td>\n<td>Select the session set returned for a specific web form. Omit this parameter for general sessions.</td>\n<td><code>enquiry</code>, <code>registration</code>; omitted returns general sessions.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"dd9e6294-02e5-4546-be86-b7d14586edfa\",\n      \"name\": \"AM Session\",\n      \"startTime\": \"08:00\",\n      \"endTime\": \"13:00\",\n      \"duration\": 5,\n      \"coreDuration\": 5\n    }\n  ],\n  \"correlationId\": \"6a3e904c-407f-4ea3-aab5-2c8a913e7ef2\",\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1","sessions"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>Select the session set returned for a specific web form. Omit this parameter for general sessions. Possible values: <code>enquiry</code>, <code>registration</code>; omitted returns general sessions.</p>\n","type":"text/plain"},"key":"type","value":"enquiry"}],"variable":[]}},"response":[],"_postman_id":"53a3e914-6864-441e-a589-682dd7ca4576"},{"name":"Get Availability","id":"0fe764a8-f3f4-4532-ae3c-37966def0368","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1/availability?from=2026-09-01&to=2026-09-30","description":"<p>Return daily nursery availability for an inclusive date range.</p>\n<p><strong>Required scope:</strong> availability:read.</p>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>from</code></td>\n<td>Yes</td>\n<td>Inclusive start date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>to</code></td>\n<td>Yes</td>\n<td>Inclusive end date; the inclusive range cannot exceed 90 calendar days.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>splitBy</code></td>\n<td>No</td>\n<td>Group availability by room or configured occupancy age group. Omit for one nursery-wide row per date.</td>\n<td><code>room</code>, <code>ageGroup</code>; omitted returns a nursery-level breakdown.</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Example</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-http\">GET https://your-tenant.eylog.co.uk/public/v1/nurseries/1/availability?from=2026-09-01&amp;to=2026-09-30\n</code></pre>\n<p><strong>Response</strong></p>\n<p>Responses use the standard status, code, message, data, correlationId, and apiVersion envelope. Each item in <code>data</code> has the same shape. The <code>day</code> bucket represents the full child-booking/core-hours interval.</p>\n<p><strong>Response example — Success (200)</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"date\": \"2026-09-15\",\n      \"segment\": {\n        \"type\": \"room\",\n        \"id\": \"00000000-0000-4000-8000-000000000901\",\n        \"label\": \"Butterfly Room\"\n      },\n      \"capacity\": {\n        \"day\": 20,\n        \"am\": 20,\n        \"pm\": 20\n      },\n      \"booked\": {\n        \"day\": 14,\n        \"am\": 12,\n        \"pm\": 15\n      },\n      \"available\": {\n        \"day\": 6,\n        \"am\": 8,\n        \"pm\": 5\n      }\n    }\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<p><strong>Errors</strong></p>\n<p>400 for invalid dates or splitBy, 401 for an invalid token, 403 for missing scope or nursery access, 404 when the nursery cannot be found, and 429 after 60 requests per fixed 60-second window.</p>\n<h3 id=\"error-response-example-404\"><strong>Error response example (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1","availability"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"description":{"content":"<p>Inclusive start date. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"from","value":"2026-09-01"},{"description":{"content":"<p>Inclusive end date; the inclusive range cannot exceed 90 calendar days. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"to","value":"2026-09-30"},{"disabled":true,"description":{"content":"<p>Group availability by room or configured occupancy age group. Omit for one nursery-wide row per date. Possible values: <code>room</code>, <code>ageGroup</code>; omitted returns a nursery-level breakdown.</p>\n","type":"text/plain"},"key":"splitBy","value":"room"}],"variable":[]}},"response":[],"_postman_id":"0fe764a8-f3f4-4532-ae3c-37966def0368"}],"id":"d07d6a22-ef23-49af-a5d9-0647594ef3a9","_postman_id":"d07d6a22-ef23-49af-a5d9-0647594ef3a9","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}}},{"name":"Nurseries Copy","item":[{"name":"Get Nursery","id":"41d2f299-c9bc-414e-8b62-16d947932684","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1","description":"<p>Returns details for one nursery in your accessible scope.</p>\n<p>Path params:</p>\n<ul>\n<li>nurseryId</li>\n</ul>\n<p>Response:</p>\n<ul>\n<li><code>data</code> (nursery object)</li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": {\n    \"guid\": \"22222222-2222-4222-8222-222222222222\",\n    \"urn\": \"TT\",\n    \"name\": \"eyworks - Nursery A\",\n    \"address\": {\n      \"address1\": \"Example Street\",\n      \"address2\": \"Example Town\",\n      \"address3\": \"Example County\",\n      \"postcode\": \"EX1 1AB\"\n    },\n    \"city\": \"Example Town\",\n    \"county\": \"Bucks\",\n    \"country\": \"United Kingdom\",\n    \"brandingColour\": \"#BFBD34\",\n    \"contact\": {\n      \"email\": \"customer@example.com\",\n      \"telephone\": \"+44 7700 900000\",\n      \"website\": \"https://www.eyworks.co.uk \",\n      \"ofstedUrn\": \"EY123456 \"\n    },\n    \"managerName\": \"\",\n    \"capacity\": 50,\n    \"operations\": {\n      \"operationDays\": [\n        \"Monday\",\n        \"Tuesday\",\n        \"Wednesday\",\n        \"Thursday\",\n        \"Friday\"\n      ],\n      \"coreDays\": [\n        \"Monday\",\n        \"Tuesday\",\n        \"Wednesday\",\n        \"Thursday\",\n        \"Friday\"\n      ],\n      \"operationalHours\": {\n        \"start\": \"07:30\",\n        \"end\": \"18:30\"\n      },\n      \"coreHours\": {\n        \"start\": \"08:00\",\n        \"end\": \"18:00\"\n      }\n    },\n    \"tags\": [\n      {\n        \"guid\": \"88888888-8888-4888-8888-888888888888\",\n        \"name\": \"Milton Keynes Group\"\n      }\n    ],\n    \"createdAt\": \"2024-01-23 17:19:53\",\n    \"updatedAt\": \"2024-10-23 22:22:58\"\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1"],"host":["https://your-tenant.eylog.co.uk"],"query":[],"variable":[]}},"response":[],"_postman_id":"41d2f299-c9bc-414e-8b62-16d947932684"},{"name":"List Rooms","id":"de6ac079-22cd-484b-b45f-773eb444e3fe","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1/rooms?page=1&pageSize=25","description":"<p>Returns paginated room records for a nursery.</p>\n<p>Path params:</p>\n<ul>\n<li>nurseryId</li>\n</ul>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>page</code></td>\n<td>No</td>\n<td>One-based page number. Defaults to <code>1</code>.</td>\n<td>Positive integer (<code>1</code> or greater).</td>\n</tr>\n<tr>\n<td><code>pageSize</code></td>\n<td>No</td>\n<td>Number of records per page. Defaults to <code>50</code>.</td>\n<td>Integer from <code>1</code> to <code>100</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Response:</p>\n<ul>\n<li><code>data</code></li>\n<li><code>metadata.pagination</code></li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"66666666-6666-4666-8666-666666666666\",\n      \"name\": \"Baby Room\",\n      \"capacity\": 9,\n      \"ageGroupLower\": 0,\n      \"ageGroupUpper\": 24\n    }\n  ],\n  \"metadata\": {\n    \"pagination\": {\n      \"page\": 1,\n      \"pageSize\": 25,\n      \"total\": 1,\n      \"hasNext\": false\n    }\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1","rooms"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>One-based page number. Defaults to <code>1</code>. Possible values: Positive integer (<code>1</code> or greater).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Number of records per page. Defaults to <code>50</code>. Possible values: Integer from <code>1</code> to <code>100</code>.</p>\n","type":"text/plain"},"key":"pageSize","value":"25"}],"variable":[]}},"response":[],"_postman_id":"de6ac079-22cd-484b-b45f-773eb444e3fe"},{"name":"List Employees","id":"9c960e9b-d046-4367-87a8-6cb92805eaae","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1/employees?page=1&pageSize=25","description":"<p>Returns paginated employee records for a nursery.</p>\n<p>Path params:</p>\n<ul>\n<li>nurseryId</li>\n</ul>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>filters[status]</code></td>\n<td>No</td>\n<td>Filter by record status. Defaults to <code>active</code> when omitted.</td>\n<td><code>active</code>, <code>inactive</code>, <code>all</code>.</td>\n</tr>\n<tr>\n<td><code>filters[genders][]</code></td>\n<td>No</td>\n<td>Repeat this parameter to filter by one or more configured gender names.</td>\n<td>Configured gender name, for example <code>male</code> or <code>female</code>.</td>\n</tr>\n<tr>\n<td><code>filters[startDateFrom]</code></td>\n<td>No</td>\n<td>Inclusive lower bound for the start date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>filters[startDateTo]</code></td>\n<td>No</td>\n<td>Inclusive upper bound for the start date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format; must not be before <code>startDateFrom</code>.</td>\n</tr>\n<tr>\n<td><code>filters[leaveDateFrom]</code></td>\n<td>No</td>\n<td>Inclusive lower bound for the leave date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>filters[leaveDateTo]</code></td>\n<td>No</td>\n<td>Inclusive upper bound for the leave date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format; must not be before <code>leaveDateFrom</code>.</td>\n</tr>\n<tr>\n<td><code>filters[dobFrom]</code></td>\n<td>No</td>\n<td>Inclusive lower bound for the date of birth.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>filters[dobTo]</code></td>\n<td>No</td>\n<td>Inclusive upper bound for the date of birth.</td>\n<td>Date in <code>YYYY-MM-DD</code> format; must not be before <code>dobFrom</code>.</td>\n</tr>\n<tr>\n<td><code>page</code></td>\n<td>No</td>\n<td>One-based page number. Defaults to <code>1</code>.</td>\n<td>Positive integer (<code>1</code> or greater).</td>\n</tr>\n<tr>\n<td><code>pageSize</code></td>\n<td>No</td>\n<td>Number of records per page. Defaults to <code>50</code>.</td>\n<td>Integer from <code>1</code> to <code>100</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Response:</p>\n<ul>\n<li><code>data</code></li>\n<li><code>metadata.pagination</code></li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"33333333-3333-4333-8333-333333333333\",\n      \"urn\": \"TT012EMPLOYEE\",\n      \"nursery\": {\n        \"guid\": \"22222222-2222-4222-8222-222222222222\",\n        \"name\": \"eyworks - Nursery A\"\n      },\n      \"firstName\": \"Example\",\n      \"lastName\": \"Customer\",\n      \"fullName\": \"Example Record\",\n      \"primaryEmail\": \"customer@example.com\",\n      \"startDate\": \"2024-01-01\",\n      \"leaveDate\": null,\n      \"status\": \"active\",\n      \"createdAt\": \"2025-01-18 23:41:50\",\n      \"updatedAt\": \"2025-01-18 23:43:50\"\n    }\n  ],\n  \"metadata\": {\n    \"pagination\": {\n      \"page\": 1,\n      \"pageSize\": 25,\n      \"total\": 1,\n      \"hasNext\": false\n    }\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1","employees"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>Filter by record status. Defaults to <code>active</code> when omitted. Possible values: <code>active</code>, <code>inactive</code>, <code>all</code>.</p>\n","type":"text/plain"},"key":"filters[status]","value":"active"},{"disabled":true,"description":{"content":"<p>Repeat this parameter to filter by one or more configured gender names. Possible values: Configured gender name, for example <code>male</code> or <code>female</code>.</p>\n","type":"text/plain"},"key":"filters[genders][]","value":"female"},{"disabled":true,"description":{"content":"<p>Inclusive lower bound for the start date. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"filters[startDateFrom]","value":"2026-01-01"},{"disabled":true,"description":{"content":"<p>Inclusive upper bound for the start date. Possible values: Date in <code>YYYY-MM-DD</code> format; must not be before <code>startDateFrom</code>.</p>\n","type":"text/plain"},"key":"filters[startDateTo]","value":"2026-01-31"},{"disabled":true,"description":{"content":"<p>Inclusive lower bound for the leave date. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"filters[leaveDateFrom]","value":"2026-01-01"},{"disabled":true,"description":{"content":"<p>Inclusive upper bound for the leave date. Possible values: Date in <code>YYYY-MM-DD</code> format; must not be before <code>leaveDateFrom</code>.</p>\n","type":"text/plain"},"key":"filters[leaveDateTo]","value":"2026-01-31"},{"disabled":true,"description":{"content":"<p>Inclusive lower bound for the date of birth. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"filters[dobFrom]","value":"2020-01-01"},{"disabled":true,"description":{"content":"<p>Inclusive upper bound for the date of birth. Possible values: Date in <code>YYYY-MM-DD</code> format; must not be before <code>dobFrom</code>.</p>\n","type":"text/plain"},"key":"filters[dobTo]","value":"2022-12-31"},{"disabled":true,"description":{"content":"<p>One-based page number. Defaults to <code>1</code>. Possible values: Positive integer (<code>1</code> or greater).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Number of records per page. Defaults to <code>50</code>. Possible values: Integer from <code>1</code> to <code>100</code>.</p>\n","type":"text/plain"},"key":"pageSize","value":"25"}],"variable":[]}},"response":[],"_postman_id":"9c960e9b-d046-4367-87a8-6cb92805eaae"},{"name":"List Children","id":"61506d24-7bd7-4aef-8fa3-7cc74e98eb63","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1/children?page=1&pageSize=25","description":"<p>Returns paginated children records for a nursery.</p>\n<p>Path params:</p>\n<ul>\n<li>nurseryId</li>\n</ul>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>filters[status]</code></td>\n<td>No</td>\n<td>Filter by record status. Defaults to <code>active</code> when omitted.</td>\n<td><code>active</code>, <code>inactive</code>, <code>all</code>.</td>\n</tr>\n<tr>\n<td><code>filters[genders][]</code></td>\n<td>No</td>\n<td>Repeat this parameter to filter by one or more configured gender names.</td>\n<td>Configured gender name, for example <code>male</code> or <code>female</code>.</td>\n</tr>\n<tr>\n<td><code>filters[startDateFrom]</code></td>\n<td>No</td>\n<td>Inclusive lower bound for the start date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>filters[startDateTo]</code></td>\n<td>No</td>\n<td>Inclusive upper bound for the start date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format; must not be before <code>startDateFrom</code>.</td>\n</tr>\n<tr>\n<td><code>filters[leaveDateFrom]</code></td>\n<td>No</td>\n<td>Inclusive lower bound for the leave date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>filters[leaveDateTo]</code></td>\n<td>No</td>\n<td>Inclusive upper bound for the leave date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format; must not be before <code>leaveDateFrom</code>.</td>\n</tr>\n<tr>\n<td><code>filters[dobFrom]</code></td>\n<td>No</td>\n<td>Inclusive lower bound for the date of birth.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>filters[dobTo]</code></td>\n<td>No</td>\n<td>Inclusive upper bound for the date of birth.</td>\n<td>Date in <code>YYYY-MM-DD</code> format; must not be before <code>dobFrom</code>.</td>\n</tr>\n<tr>\n<td><code>page</code></td>\n<td>No</td>\n<td>One-based page number. Defaults to <code>1</code>.</td>\n<td>Positive integer (<code>1</code> or greater).</td>\n</tr>\n<tr>\n<td><code>pageSize</code></td>\n<td>No</td>\n<td>Number of records per page. Defaults to <code>50</code>.</td>\n<td>Integer from <code>1</code> to <code>100</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Response:</p>\n<ul>\n<li><p><code>data</code></p>\n</li>\n<li><p><code>metadata.pagination</code></p>\n</li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"44444444-4444-4444-8444-444444444444\",\n      \"urn\": \"TT027CHILD\",\n      \"nursery\": {\n        \"guid\": \"22222222-2222-4222-8222-222222222222\",\n        \"name\": \"eyworks - Nursery A\"\n      },\n      \"firstName\": \"Example\",\n      \"lastName\": \"Customer\",\n      \"fullName\": \"Example Record\",\n      \"dob\": \"2022-11-03\",\n      \"startDate\": \"2023-09-01\",\n      \"leaveDate\": \"2027-08-31\",\n      \"status\": \"active\",\n      \"createdAt\": null,\n      \"updatedAt\": \"2025-11-03 03:07:30\"\n    }\n  ],\n  \"metadata\": {\n    \"pagination\": {\n      \"page\": 1,\n      \"pageSize\": 25,\n      \"total\": 1,\n      \"hasNext\": false\n    }\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1","children"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>Filter by record status. Defaults to <code>active</code> when omitted. Possible values: <code>active</code>, <code>inactive</code>, <code>all</code>.</p>\n","type":"text/plain"},"key":"filters[status]","value":"active"},{"disabled":true,"description":{"content":"<p>Repeat this parameter to filter by one or more configured gender names. Possible values: Configured gender name, for example <code>male</code> or <code>female</code>.</p>\n","type":"text/plain"},"key":"filters[genders][]","value":"female"},{"disabled":true,"description":{"content":"<p>Inclusive lower bound for the start date. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"filters[startDateFrom]","value":"2026-01-01"},{"disabled":true,"description":{"content":"<p>Inclusive upper bound for the start date. Possible values: Date in <code>YYYY-MM-DD</code> format; must not be before <code>startDateFrom</code>.</p>\n","type":"text/plain"},"key":"filters[startDateTo]","value":"2026-01-31"},{"disabled":true,"description":{"content":"<p>Inclusive lower bound for the leave date. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"filters[leaveDateFrom]","value":"2026-01-01"},{"disabled":true,"description":{"content":"<p>Inclusive upper bound for the leave date. Possible values: Date in <code>YYYY-MM-DD</code> format; must not be before <code>leaveDateFrom</code>.</p>\n","type":"text/plain"},"key":"filters[leaveDateTo]","value":"2026-01-31"},{"disabled":true,"description":{"content":"<p>Inclusive lower bound for the date of birth. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"filters[dobFrom]","value":"2020-01-01"},{"disabled":true,"description":{"content":"<p>Inclusive upper bound for the date of birth. Possible values: Date in <code>YYYY-MM-DD</code> format; must not be before <code>dobFrom</code>.</p>\n","type":"text/plain"},"key":"filters[dobTo]","value":"2022-12-31"},{"disabled":true,"description":{"content":"<p>One-based page number. Defaults to <code>1</code>. Possible values: Positive integer (<code>1</code> or greater).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Number of records per page. Defaults to <code>50</code>. Possible values: Integer from <code>1</code> to <code>100</code>.</p>\n","type":"text/plain"},"key":"pageSize","value":"25"}],"variable":[]}},"response":[],"_postman_id":"61506d24-7bd7-4aef-8fa3-7cc74e98eb63"},{"name":"List Enquiries","id":"682848c4-67c3-497f-a68e-936e6f5f7b0d","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1/enquiries?page=1&pageSize=25","description":"<p>Returns paginated enquiries for a nursery.</p>\n<p>Path params:</p>\n<ul>\n<li>nurseryId</li>\n</ul>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>filters[enquiryDate]</code></td>\n<td>No</td>\n<td>Return enquiries created on this date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>filters[status][]</code></td>\n<td>No</td>\n<td>Repeat this parameter to filter by one or more enquiry lifecycle statuses.</td>\n<td><code>ENROLLED</code>, <code>LOST</code>, <code>NOT_ENROLLED</code>, <code>WAITLISTED</code>.</td>\n</tr>\n<tr>\n<td><code>filters[stage][]</code></td>\n<td>No</td>\n<td>Repeat this parameter to filter by one or more enquiry stages.</td>\n<td><code>ENQUIRY_IN</code>, <code>PRE_VISIT_FOLLOW_UP</code>, <code>VISIT</code>, <code>POST_VISIT_FOLLOW_UP</code>, <code>WAITLISTED</code>, <code>REGISTRATION_FORM</code>.</td>\n</tr>\n<tr>\n<td><code>page</code></td>\n<td>No</td>\n<td>One-based page number. Defaults to <code>1</code>.</td>\n<td>Positive integer (<code>1</code> or greater).</td>\n</tr>\n<tr>\n<td><code>pageSize</code></td>\n<td>No</td>\n<td>Number of records per page. Defaults to <code>50</code>.</td>\n<td>Integer from <code>1</code> to <code>100</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Response:</p>\n<ul>\n<li><p><code>data</code></p>\n</li>\n<li><p><code>metadata.pagination</code></p>\n</li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"55555555-5555-4555-8555-555555555555\",\n      \"nursery\": {\n        \"guid\": \"22222222-2222-4222-8222-222222222222\",\n        \"name\": \"eyworks - Nursery A\"\n      },\n      \"parentName\": \"Example Parent\",\n      \"parentEmail\": \"customer@example.com\",\n      \"childName\": \"Example Child\",\n      \"childDob\": null,\n      \"childStartDate\": null,\n      \"stage\": \"ENQUIRY_IN\",\n      \"status\": \"NOT_ENROLLED\",\n      \"createdAt\": \"2026-02-23 16:52:54\",\n      \"updatedAt\": null\n    }\n  ],\n  \"metadata\": {\n    \"pagination\": {\n      \"page\": 1,\n      \"pageSize\": 25,\n      \"total\": 1,\n      \"hasNext\": false\n    }\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1","enquiries"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>Return enquiries created on this date. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"filters[enquiryDate]","value":"2026-02-23"},{"disabled":true,"description":{"content":"<p>Repeat this parameter to filter by one or more enquiry lifecycle statuses. Possible values: <code>ENROLLED</code>, <code>LOST</code>, <code>NOT_ENROLLED</code>, <code>WAITLISTED</code>.</p>\n","type":"text/plain"},"key":"filters[status][]","value":"NOT_ENROLLED"},{"disabled":true,"description":{"content":"<p>Repeat this parameter to filter by one or more enquiry stages. Possible values: <code>ENQUIRY_IN</code>, <code>PRE_VISIT_FOLLOW_UP</code>, <code>VISIT</code>, <code>POST_VISIT_FOLLOW_UP</code>, <code>WAITLISTED</code>, <code>REGISTRATION_FORM</code>.</p>\n","type":"text/plain"},"key":"filters[stage][]","value":"ENQUIRY_IN"},{"disabled":true,"description":{"content":"<p>One-based page number. Defaults to <code>1</code>. Possible values: Positive integer (<code>1</code> or greater).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Number of records per page. Defaults to <code>50</code>. Possible values: Integer from <code>1</code> to <code>100</code>.</p>\n","type":"text/plain"},"key":"pageSize","value":"25"}],"variable":[]}},"response":[],"_postman_id":"682848c4-67c3-497f-a68e-936e6f5f7b0d"},{"name":"List Sessions","id":"942f0c20-1b9c-4994-93f8-2a16446a039f","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1/sessions","description":"<p>Returns active general sessions for a nursery. Requires <code>nurseries:read</code>. Use <code>type=enquiry</code> or <code>type=registration</code> to match the corresponding web form. The result is unpaginated.</p>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>type</code></td>\n<td>No</td>\n<td>Select the session set returned for a specific web form. Omit this parameter for general sessions.</td>\n<td><code>enquiry</code>, <code>registration</code>; omitted returns general sessions.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"dd9e6294-02e5-4546-be86-b7d14586edfa\",\n      \"name\": \"AM Session\",\n      \"startTime\": \"08:00\",\n      \"endTime\": \"13:00\",\n      \"duration\": 5,\n      \"coreDuration\": 5\n    }\n  ],\n  \"correlationId\": \"6a3e904c-407f-4ea3-aab5-2c8a913e7ef2\",\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1","sessions"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>Select the session set returned for a specific web form. Omit this parameter for general sessions. Possible values: <code>enquiry</code>, <code>registration</code>; omitted returns general sessions.</p>\n","type":"text/plain"},"key":"type","value":"enquiry"}],"variable":[]}},"response":[],"_postman_id":"942f0c20-1b9c-4994-93f8-2a16446a039f"},{"name":"Get Availability","id":"40c704cc-b9d1-417d-8f16-70fd0a7988bb","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1/availability?from=2026-09-01&to=2026-09-30","description":"<p>Return daily nursery availability for an inclusive date range.</p>\n<p><strong>Required scope:</strong> availability:read.</p>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>from</code></td>\n<td>Yes</td>\n<td>Inclusive start date.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>to</code></td>\n<td>Yes</td>\n<td>Inclusive end date; the inclusive range cannot exceed 90 calendar days.</td>\n<td>Date in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td><code>splitBy</code></td>\n<td>No</td>\n<td>Group availability by room or configured occupancy age group. Omit for one nursery-wide row per date.</td>\n<td><code>room</code>, <code>ageGroup</code>; omitted returns a nursery-level breakdown.</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Example</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-http\">GET https://your-tenant.eylog.co.uk/public/v1/nurseries/1/availability?from=2026-09-01&amp;to=2026-09-30\n</code></pre>\n<p><strong>Response</strong></p>\n<p>Responses use the standard status, code, message, data, correlationId, and apiVersion envelope. Each item in <code>data</code> has the same shape. The <code>day</code> bucket represents the full child-booking/core-hours interval.</p>\n<p><strong>Response example — Success (200)</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"date\": \"2026-09-15\",\n      \"segment\": {\n        \"type\": \"room\",\n        \"id\": \"00000000-0000-4000-8000-000000000901\",\n        \"label\": \"Butterfly Room\"\n      },\n      \"capacity\": {\n        \"day\": 20,\n        \"am\": 20,\n        \"pm\": 20\n      },\n      \"booked\": {\n        \"day\": 14,\n        \"am\": 12,\n        \"pm\": 15\n      },\n      \"available\": {\n        \"day\": 6,\n        \"am\": 8,\n        \"pm\": 5\n      }\n    }\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<p><strong>Errors</strong></p>\n<p>400 for invalid dates or splitBy, 401 for an invalid token, 403 for missing scope or nursery access, 404 when the nursery cannot be found, and 429 after 60 requests per fixed 60-second window.</p>\n<h3 id=\"error-response-example-404\"><strong>Error response example (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1","availability"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"description":{"content":"<p>Inclusive start date. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"from","value":"2026-09-01"},{"description":{"content":"<p>Inclusive end date; the inclusive range cannot exceed 90 calendar days. Possible values: Date in <code>YYYY-MM-DD</code> format.</p>\n","type":"text/plain"},"key":"to","value":"2026-09-30"},{"disabled":true,"description":{"content":"<p>Group availability by room or configured occupancy age group. Omit for one nursery-wide row per date. Possible values: <code>room</code>, <code>ageGroup</code>; omitted returns a nursery-level breakdown.</p>\n","type":"text/plain"},"key":"splitBy","value":"room"}],"variable":[]}},"response":[],"_postman_id":"40c704cc-b9d1-417d-8f16-70fd0a7988bb"}],"id":"8e1c4187-756e-4025-9dfa-f793fba54732","_postman_id":"8e1c4187-756e-4025-9dfa-f793fba54732","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}}},{"name":"Employees","item":[{"name":"Get Employee","id":"0ea0b9f3-a380-451d-b2b7-efab7e3a4bc4","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/employees/1","description":"<p>Returns details for a single employee.</p>\n<p>Path params:</p>\n<ul>\n<li>employeeId</li>\n</ul>\n<p>Response:</p>\n<ul>\n<li><code>data</code> (employee object)</li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": {\n    \"guid\": \"33333333-3333-4333-8333-333333333333\",\n    \"nursery\": {\n      \"guid\": \"22222222-2222-4222-8222-222222222222\",\n      \"name\": \"eyworks - Nursery A\"\n    },\n    \"urn\": \"TT012EMPLOYEE\",\n    \"title\": \"Mrs\",\n    \"firstName\": \"Example\",\n    \"lastName\": \"Customer\",\n    \"fullName\": \"Example Record\",\n    \"dob\": \"1999-05-03\",\n    \"gender\": \"Female\",\n    \"maritalStatus\": \"Married\",\n    \"address\": {\n      \"address1\": \"Example Street\",\n      \"address2\": \"Example Town\",\n      \"address3\": \"Example County\",\n      \"postcode\": \"EX1 1AB\"\n    },\n    \"primaryEmail\": \"customer@example.com\",\n    \"phone\": \"+44 7700 900000\",\n    \"room\": {\n      \"guid\": \"66666666-6666-4666-8666-666666666666\",\n      \"name\": \"Baby Room\"\n    },\n    \"lineManagers\": [\n      {\n        \"guid\": \"77777777-7777-4777-8777-777777777777\",\n        \"name\": \"Example Manager\",\n        \"email\": \"customer@example.com\"\n      }\n    ],\n    \"startDate\": \"2024-01-01\",\n    \"leaveDate\": null,\n    \"status\": \"active\",\n    \"employment\": {\n      \"contractType\": \"PERMANENT\",\n      \"salaried\": false,\n      \"jobTitle\": \"Bank Staff\",\n      \"level\": \"\"\n    },\n    \"createdAt\": \"2025-01-18 23:41:50\",\n    \"updatedAt\": \"2026-02-23 16:07:29\"\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"Employee not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","employees","1"],"host":["https://your-tenant.eylog.co.uk"],"query":[],"variable":[]}},"response":[],"_postman_id":"0ea0b9f3-a380-451d-b2b7-efab7e3a4bc4"},{"name":"Get Qualifications","id":"ea9bc869-3da0-48ee-bc8a-c284ab654cbb","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/employees/1/qualifications?page=1&pageSize=25","description":"<p>Returns paginated qualification records for a single employee.</p>\n<p>Path params:</p>\n<ul>\n<li>employeeId</li>\n</ul>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>status</code></td>\n<td>No</td>\n<td>Filter by one or more qualification statuses. Values may be comma-separated.</td>\n<td><code>CURRENT</code>, <code>WORKING_TOWARDS</code>, <code>NEXT_STEPS</code>.</td>\n</tr>\n<tr>\n<td><code>page</code></td>\n<td>No</td>\n<td>One-based page number. Defaults to <code>1</code>.</td>\n<td>Positive integer (<code>1</code> or greater).</td>\n</tr>\n<tr>\n<td><code>pageSize</code></td>\n<td>No</td>\n<td>Number of records per page. Defaults to <code>50</code>.</td>\n<td>Integer from <code>1</code> to <code>100</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Response:</p>\n<ul>\n<li><code>data</code></li>\n<li><code>metadata.pagination</code></li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"id\": 634,\n      \"name\": \"GCSE Maths\",\n      \"workingTowardsDate\": \"2026-01-30\",\n      \"issuedAwardedDate\": null,\n      \"stage\": 1,\n      \"stageText\": \"Working Towards\",\n      \"notes\": \"Example note\",\n      \"hasAttachments\": true,\n      \"qualificationOption\": {\n        \"id\": 36,\n        \"name\": \"GCSE Maths\",\n        \"validity\": 0\n      },\n      \"staffDetails\": {\n        \"id\": \"3956\",\n        \"position\": \"34\"\n      }\n    }\n  ],\n  \"metadata\": {\n    \"pagination\": {\n      \"page\": 1,\n      \"pageSize\": 25,\n      \"total\": 1,\n      \"hasNext\": false\n    }\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"Employee not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","employees","1","qualifications"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>Filter by one or more qualification statuses. Values may be comma-separated. Possible values: <code>CURRENT</code>, <code>WORKING_TOWARDS</code>, <code>NEXT_STEPS</code>.</p>\n","type":"text/plain"},"key":"status","value":"CURRENT,WORKING_TOWARDS,NEXT_STEPS"},{"disabled":true,"description":{"content":"<p>One-based page number. Defaults to <code>1</code>. Possible values: Positive integer (<code>1</code> or greater).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Number of records per page. Defaults to <code>50</code>. Possible values: Integer from <code>1</code> to <code>100</code>.</p>\n","type":"text/plain"},"key":"pageSize","value":"25"}],"variable":[]}},"response":[],"_postman_id":"ea9bc869-3da0-48ee-bc8a-c284ab654cbb"},{"name":"Get Trainings","id":"0518ee9a-2e6b-4aac-bdb0-0ec6f5f00710","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/employees/1/trainings?page=1&pageSize=25","description":"<p>Returns paginated training records for a single employee.</p>\n<p>Path params:</p>\n<ul>\n<li>employeeId</li>\n</ul>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>status</code></td>\n<td>No</td>\n<td>Filter by one or more training statuses. Values may be comma-separated.</td>\n<td><code>COMPLETED</code>, <code>IN_PROGRESS</code>, <code>ENROLLED</code>.</td>\n</tr>\n<tr>\n<td><code>page</code></td>\n<td>No</td>\n<td>One-based page number. Defaults to <code>1</code>.</td>\n<td>Positive integer (<code>1</code> or greater).</td>\n</tr>\n<tr>\n<td><code>pageSize</code></td>\n<td>No</td>\n<td>Number of records per page. Defaults to <code>50</code>.</td>\n<td>Integer from <code>1</code> to <code>100</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Response:</p>\n<ul>\n<li><code>data</code></li>\n<li><code>metadata.pagination</code></li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"id\": 1904,\n      \"name\": \"Fire Safety Training\",\n      \"workingTowardsDate\": \"2025-01-30\",\n      \"issuedAwardedDate\": \"2026-04-16\",\n      \"stage\": 0,\n      \"stageText\": \"Completed\",\n      \"notes\": \"Example note\",\n      \"hasAttachments\": true,\n      \"trainingCourseOption\": {\n        \"id\": 20,\n        \"name\": \"Fire Safety Training\",\n        \"validity\": 12\n      },\n      \"staffDetails\": {\n        \"id\": \"3956\",\n        \"position\": \"34\"\n      }\n    }\n  ],\n  \"metadata\": {\n    \"pagination\": {\n      \"page\": 1,\n      \"pageSize\": 25,\n      \"total\": 1,\n      \"hasNext\": false\n    }\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"Employee not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","employees","1","trainings"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>Filter by one or more training statuses. Values may be comma-separated. Possible values: <code>COMPLETED</code>, <code>IN_PROGRESS</code>, <code>ENROLLED</code>.</p>\n","type":"text/plain"},"key":"status","value":"COMPLETED,IN_PROGRESS,ENROLLED"},{"disabled":true,"description":{"content":"<p>One-based page number. Defaults to <code>1</code>. Possible values: Positive integer (<code>1</code> or greater).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Number of records per page. Defaults to <code>50</code>. Possible values: Integer from <code>1</code> to <code>100</code>.</p>\n","type":"text/plain"},"key":"pageSize","value":"25"}],"variable":[]}},"response":[],"_postman_id":"0518ee9a-2e6b-4aac-bdb0-0ec6f5f00710"}],"id":"9e0fe09c-b32a-4c26-9c20-4e3d1fa8b72d","_postman_id":"9e0fe09c-b32a-4c26-9c20-4e3d1fa8b72d","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}}},{"name":"Children","item":[{"name":"Get Child","id":"2ff1de5b-db39-43a2-b489-c3a3eba2d4f5","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/children/00000000-0000-4000-8000-000000000001","description":"<p>Returns details for a single child.</p>\n<p>Path params:</p>\n<ul>\n<li>childId</li>\n</ul>\n<p>Response:</p>\n<ul>\n<li><code>data</code></li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": {\n    \"guid\": \"44444444-4444-4444-8444-444444444444\",\n    \"urn\": \"TT027CHILD\",\n    \"nursery\": {\n      \"guid\": \"22222222-2222-4222-8222-222222222222\",\n      \"name\": \"eyworks - Nursery A\"\n    },\n    \"firstName\": \"Example\",\n    \"middleName\": \"\",\n    \"lastName\": \"Customer\",\n    \"fullName\": \"Example Record\",\n    \"preferredName\": \"\",\n    \"dob\": \"2022-11-03\",\n    \"gender\": \"Female\",\n    \"startDate\": \"2023-09-01\",\n    \"leaveDate\": \"2027-08-31\",\n    \"status\": \"active\",\n    \"address\": {\n      \"address1\": \"Example Street\",\n      \"address2\": \"Example Town\",\n      \"address3\": \"Example County\",\n      \"postcode\": \"EX1 1AB\"\n    },\n    \"createdAt\": null,\n    \"updatedAt\": \"2025-11-03 03:07:30\"\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"Child not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","children","00000000-0000-4000-8000-000000000001"],"host":["https://your-tenant.eylog.co.uk"],"query":[],"variable":[]}},"response":[],"_postman_id":"2ff1de5b-db39-43a2-b489-c3a3eba2d4f5"}],"id":"1892b0f4-2eb7-474e-8f82-ec55cc9a91fd","_postman_id":"1892b0f4-2eb7-474e-8f82-ec55cc9a91fd","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}}},{"name":"Enquiries","item":[{"name":"Financials","item":[{"name":"List Enquiry Financial Invoices","event":[{"script":{"exec":["// Use an existing valid enquiry-financials token, or obtain one immediately before the request.","const existingToken = pm.environment.get(\"accessToken\") || pm.collectionVariables.get(\"accessToken\");","","function hasEnquiryFinancialAccess(token) {","    try {","        const payload = JSON.parse(atob(token.split(\".\")[1]));","        return payload.exp > Math.floor(Date.now() / 1000) + 60 &&","            Array.isArray(payload.scope) &&","            payload.scope.includes(\"financials:read\") &&","            payload.scope.includes(\"enquiries:read\");","    } catch (error) {","        return false;","    }","}","","function applyToken(token) {","    pm.request.headers.upsert({","        key: \"Authorization\",","        value: \"Bearer \" + token","    });","}","","if (hasEnquiryFinancialAccess(existingToken)) {","    applyToken(existingToken);","} else {","    pm.sendRequest({","        url: pm.variables.replaceIn(\"https://your-tenant.eylog.co.uk/public/v1/oauth/token\"),","        method: \"POST\",","        header: {","            \"Content-Type\": \"application/json\",","            \"Accept\": \"application/json\"","        },","        body: {","            mode: \"raw\",","            raw: JSON.stringify({","                grantType: \"client_credentials\",","                clientId: pm.environment.get(\"clientId\"),","                clientSecret: pm.environment.get(\"clientSecret\")","            })","        }","    }, function (error, response) {","        if (error) {","            throw error;","        }","        const json = response.json();","        if (!json.data || !json.data.accessToken) {","            throw new Error(\"Unable to obtain a valid enquiry-financials access token\");","        }","        pm.environment.set(\"accessToken\", json.data.accessToken);","        pm.collectionVariables.set(\"accessToken\", json.data.accessToken);","        applyToken(json.data.accessToken);","    });","}"],"type":"text/javascript"},"listen":"prerequest"},{"script":{"exec":["pm.test(\"Standard success envelope is returned\", function () {","    pm.response.to.have.status(200);","    const body = pm.response.json();","    pm.expect(body.status).to.eql(true);","    pm.expect(body.code).to.eql(200);","    pm.expect(body.data).to.be.an(\"array\");","    pm.expect(body.metadata.pagination).to.be.an(\"object\");","});","","const body = pm.response.json();","const moneyFields = [\"grossAmount\", \"fundingReduction\", \"holidayReduction\", \"discount\", \"totalAmount\", \"amountPaid\", \"amountDue\"];","const validPaymentStatuses = [\"PAID\", \"PENDING_PAYMENT\"];","const validHistoryTypes = [\"PAYMENT\", \"CREDIT\"];","const validHistoryStatuses = [\"PAID_OUT\", \"PROCESSED\", \"POSTED\", \"PENDING\", \"FAILED\", \"CANCELLED\", \"REVERSED\"];","const toCents = function (value) { return Math.round(Number(value) * 100); };","","body.data.forEach(function (invoice, index) {","    pm.test(\"Invoice \" + index + \" uses the public financial contract\", function () {","        pm.expect(validPaymentStatuses).to.include(invoice.paymentStatus);","        [\"invoiceDate\", \"dueDate\", \"fromDate\", \"toDate\"].forEach(function (field) {","            if (invoice.dates[field] !== null) {","                pm.expect(invoice.dates[field]).to.match(/^\\d{4}-\\d{2}-\\d{2}$/);","            }","        });","        moneyFields.forEach(function (field) {","            pm.expect(invoice.amounts[field]).to.be.a(\"string\").and.match(/^\\d+\\.\\d{2}$/);","        });","        pm.expect(invoice).to.not.have.property(\"allocations\");","        pm.expect(invoice.paymentHistory).to.be.an(\"array\");","        pm.expect(toCents(invoice.amounts.amountPaid) + toCents(invoice.amounts.amountDue)).to.eql(toCents(invoice.amounts.totalAmount));","        const historyTotal = invoice.paymentHistory.reduce(function (sum, entry) {","            return sum + toCents(entry.amount);","        }, 0);","        pm.expect(historyTotal).to.eql(toCents(invoice.amounts.amountPaid));","        invoice.paymentHistory.forEach(function (entry) {","            pm.expect(validHistoryTypes).to.include(entry.type);","            [\"guid\", \"invoiceGuid\", \"transactionId\", \"amount\", \"paymentMode\", \"paymentReference\", \"paymentDate\", \"status\", \"allocatedAt\"].forEach(function (field) {","                pm.expect(entry).to.have.property(field);","            });","            pm.expect(entry.paymentDate).to.match(/^\\d{4}-\\d{2}-\\d{2}$/);","            pm.expect(validHistoryStatuses).to.include(entry.status);","        });","    });","});","body.data.forEach(function (invoice, index) {","    pm.test(\"Invoice \" + index + \" regeneration history matches the public contract\", function () {","        pm.expect(invoice.regenerationHistory).to.be.an(\"array\").and.empty;","        invoice.regenerationHistory.forEach(function (history) {","            [\"reference\", \"dates\", \"regeneratedAt\", \"amount\"].forEach(function (field) {","                pm.expect(history).to.have.property(field);","            pm.expect(history).not.to.have.property(\"guid\");","            pm.expect(history).not.to.have.property(\"invoiceNumber\");","            });","            [\"invoiceDate\", \"fromDate\", \"toDate\"].forEach(function (field) {","                if (history.dates[field] !== null) {","                    pm.expect(history.dates[field]).to.match(/^\\d{4}-\\d{2}-\\d{2}$/);","                }","            });","            pm.expect(history.amount).to.be.a(\"string\").and.match(/^\\d+\\.\\d{2}$/);","            if (history.regeneratedAt !== null) {","            pm.expect(history.regeneratedAt).to.match(/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$/);","            }","        });","    });","});"],"type":"text/javascript"},"listen":"test"}],"id":"5f76ab3f-e7c7-975a-34e1-75d5e3fd3d30","request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/enquiries/00000000-0000-4000-8000-000000000003/financials/invoices?page=1&pageSize=25","description":"<p>Returns the current logical invoices raised against an enquiry before enrolment.</p>\n<h2 id=\"authorization\"><strong>Authorization</strong></h2>\n<p>Requires a valid Bearer token with both the <code>financials:read</code> and <code>enquiries:read</code> scopes.</p>\n<h2 id=\"path-parameters\"><strong>Path parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>enquiryGuid</code></td>\n<td>Yes</td>\n<td>Public UUIDv4 GUID of the enquiry.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>status</code></td>\n<td>No</td>\n<td>Filter by invoice payment status.</td>\n<td><code>PENDING_PAYMENT</code>, <code>PAID</code>.</td>\n</tr>\n<tr>\n<td><code>invoiceStatus</code></td>\n<td>No</td>\n<td>Filter by invoice document status. Defaults to <code>APPROVED</code>.</td>\n<td><code>APPROVED</code>, <code>DRAFT</code>, or comma-separated values.</td>\n</tr>\n<tr>\n<td><code>pageSize</code></td>\n<td>No</td>\n<td>Number of records per page. Defaults to <code>50</code>.</td>\n<td>Integer from <code>1</code> to <code>100</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\"><strong>Response</strong></h2>\n<p>Returns posted, non-deleted logical invoices and excludes credit records, regenerated predecessors, and V3 line items. Invoice dates use <code>YYYY-MM-DD</code> (or <code>null</code> where the platform has no date). Money values are decimal strings.</p>\n<p><code>paymentStatus</code> is <code>PAID</code> or <code>PENDING_PAYMENT</code>, normalised from the invoice status stored by the platform.</p>\n<p><code>paymentHistory</code> contains both payment and credit entries shown in the platform's Invoice Payment History. Use <code>type</code> to distinguish them. Both types expose the transaction ID, amount, platform payment mode and reference, payment date, platform status, and allocation timestamp. <code>paymentMode</code> preserves the platform display value, for example <code>eypay (Tax-Free Childcare)</code> or <code>Xero Upload</code>.</p>\n<p><code>amounts.amountPaid</code> includes both payment and credit entries allocated to the invoice; deposits are not treated as payments unless the platform has allocated them as an invoice credit.</p>\n<p><code>regenerationHistory</code> is returned as an empty array because enquiry invoice regeneration is not supported.</p>\n<h2 id=\"errors\"><strong>Errors</strong></h2>\n<ul>\n<li><p><code>401 Unauthorized</code>: missing, invalid, or expired access token.</p>\n</li>\n<li><p><code>403 Forbidden</code>: the token lacks <code>financials:read</code> or <code>enquiries:read</code>, or the requested enquiry is outside the client's permitted scope.</p>\n</li>\n<li><p><code>404 Not Found</code>: the requested enquiry does not exist or is not available to the authenticated client.</p>\n</li>\n<li><p><code>429 Too Many Requests</code>: financials rate limit exceeded.</p>\n</li>\n<li><p><code>500 Internal Server Error</code>: unexpected server failure.</p>\n</li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"00000000-0000-4000-8000-000000000002\",\n      \"invoiceNumber\": \"INV-2026-0001\",\n      \"invoiceType\": \"MONTHLY\",\n      \"dates\": {\n        \"invoiceDate\": \"2026-08-01\",\n        \"dueDate\": \"2026-08-15\",\n        \"fromDate\": \"2026-08-01\",\n        \"toDate\": \"2026-08-31\"\n      },\n      \"description\": \"Monthly Invoice for 01-08-2026 to 31-08-2026\",\n      \"reference\": \"ENQUIRY-001\",\n      \"paymentStatus\": \"PAID\",\n      \"invoiceStatus\": \"APPROVED\",\n      \"amounts\": {\n        \"grossAmount\": \"550.00\",\n        \"fundingReduction\": \"50.00\",\n        \"holidayReduction\": \"0.00\",\n        \"discount\": \"0.00\",\n        \"totalAmount\": \"500.00\",\n        \"amountPaid\": \"500.00\",\n        \"amountDue\": \"0.00\"\n      },\n      \"regenerationHistory\": [],\n      \"paymentHistory\": [\n        {\n          \"guid\": \"payment-history-guid\",\n          \"type\": \"PAYMENT\",\n          \"invoiceGuid\": \"00000000-0000-4000-8000-000000000002\",\n          \"transactionId\": 85926,\n          \"amount\": \"491.38\",\n          \"paymentMode\": \"eypay (Tax-Free Childcare)\",\n          \"paymentReference\": \"PAY-2026-0001\",\n          \"paymentDate\": \"2026-08-03\",\n          \"status\": \"PAID_OUT\",\n          \"allocatedAt\": \"2026-08-03 04:00:24\"\n        },\n        {\n          \"guid\": \"credit-history-guid\",\n          \"type\": \"CREDIT\",\n          \"invoiceGuid\": \"00000000-0000-4000-8000-000000000002\",\n          \"transactionId\": 97695,\n          \"amount\": \"8.62\",\n          \"paymentMode\": \"Xero Upload\",\n          \"paymentReference\": \".\",\n          \"paymentDate\": \"2026-07-01\",\n          \"status\": \"PROCESSED\",\n          \"allocatedAt\": \"2026-07-31 13:19:35\"\n        }\n      ],\n      \"locked\": true,\n      \"split\": false,\n      \"createdAt\": \"2026-08-01 08:00:00\",\n      \"updatedAt\": \"2026-08-05 10:00:00\",\n      \"currency\": \"GBP\"\n    }\n  ],\n  \"metadata\": {\n    \"pagination\": {\n      \"page\": 1,\n      \"pageSize\": 25,\n      \"total\": 1,\n      \"hasNext\": false\n    },\n    \"snapshotAt\": \"2026-08-26T09:00:00Z\"\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n<h2 id=\"enquiry-invoice-behaviour\"><strong>Enquiry invoice behaviour</strong></h2>\n<p>These endpoints expose registration-fee and other invoices held against an enquiry before the child is enrolled. They require both the <code>financials:read</code> and <code>enquiries:read</code> scopes, plus access to the enquiry's nursery. Only invoice resources are exposed for enquiries; enquiry financial summaries, credits, payments, and transactions are intentionally not provided.</p>\n<p>When an enquiry is enrolled, its URN is transferred to the child. The original enquiry invoice remains available for audit, while any copied invoice is available through the child financial invoice endpoints.</p>\n","urlObject":{"path":["public/v1","enquiries","00000000-0000-4000-8000-000000000003","financials","invoices"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>Filter by invoice payment status. Possible values: <code>PENDING_PAYMENT</code>, <code>PAID</code>.</p>\n","type":"text/plain"},"key":"status","value":"PAID"},{"disabled":true,"description":{"content":"<p>Filter by invoice document status. Defaults to <code>APPROVED</code>. Use <code>DRAFT</code> for draft invoices or <code>APPROVED,DRAFT</code> for both. Comma-separated values are supported.</p>\n","type":"text/plain"},"key":"invoiceStatus","value":"DRAFT,APPROVED"},{"description":{"content":"<p>One-based page number. Defaults to <code>1</code>. Possible values: Positive integer (<code>1</code> or greater).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Number of records per page. Defaults to <code>50</code>. Possible values: Integer from <code>1</code> to <code>100</code>.</p>\n","type":"text/plain"},"key":"pageSize","value":"25"}],"variable":[]}},"response":[],"_postman_id":"5f76ab3f-e7c7-975a-34e1-75d5e3fd3d30"},{"name":"Get Enquiry Financial Invoice","event":[{"script":{"exec":["// Use an existing valid enquiry-financials token, or obtain one immediately before the request.","const existingToken = pm.environment.get(\"accessToken\") || pm.collectionVariables.get(\"accessToken\");","","function hasEnquiryFinancialAccess(token) {","    try {","        const payload = JSON.parse(atob(token.split(\".\")[1]));","        return payload.exp > Math.floor(Date.now() / 1000) + 60 &&","            Array.isArray(payload.scope) &&","            payload.scope.includes(\"financials:read\") &&","            payload.scope.includes(\"enquiries:read\");","    } catch (error) {","        return false;","    }","}","","function applyToken(token) {","    pm.request.headers.upsert({","        key: \"Authorization\",","        value: \"Bearer \" + token","    });","}","","if (hasEnquiryFinancialAccess(existingToken)) {","    applyToken(existingToken);","} else {","    pm.sendRequest({","        url: pm.variables.replaceIn(\"https://your-tenant.eylog.co.uk/public/v1/oauth/token\"),","        method: \"POST\",","        header: {","            \"Content-Type\": \"application/json\",","            \"Accept\": \"application/json\"","        },","        body: {","            mode: \"raw\",","            raw: JSON.stringify({","                grantType: \"client_credentials\",","                clientId: pm.environment.get(\"clientId\"),","                clientSecret: pm.environment.get(\"clientSecret\")","            })","        }","    }, function (error, response) {","        if (error) {","            throw error;","        }","        const json = response.json();","        if (!json.data || !json.data.accessToken) {","            throw new Error(\"Unable to obtain a valid enquiry-financials access token\");","        }","        pm.environment.set(\"accessToken\", json.data.accessToken);","        pm.collectionVariables.set(\"accessToken\", json.data.accessToken);","        applyToken(json.data.accessToken);","    });","}"],"type":"text/javascript"},"listen":"prerequest"},{"script":{"exec":["pm.test(\"Standard success envelope is returned\", function () {","    pm.response.to.have.status(200);","    const body = pm.response.json();","    pm.expect(body.status).to.eql(true);","    pm.expect(body.code).to.eql(200);","    pm.expect(body.data).to.be.an(\"object\");","});","","const invoice = pm.response.json().data;","const moneyFields = [\"grossAmount\", \"fundingReduction\", \"holidayReduction\", \"discount\", \"totalAmount\", \"amountPaid\", \"amountDue\"];","const validPaymentStatuses = [\"PAID\", \"PENDING_PAYMENT\"];","const validHistoryTypes = [\"PAYMENT\", \"CREDIT\"];","const validHistoryStatuses = [\"PAID_OUT\", \"PROCESSED\", \"POSTED\", \"PENDING\", \"FAILED\", \"CANCELLED\", \"REVERSED\"];","const toCents = function (value) { return Math.round(Number(value) * 100); };","","pm.test(\"Invoice fields match the public financial contract\", function () {","    pm.expect(validPaymentStatuses).to.include(invoice.paymentStatus);","    [\"invoiceDate\", \"dueDate\", \"fromDate\", \"toDate\"].forEach(function (field) {","        if (invoice.dates[field] !== null) {","            pm.expect(invoice.dates[field]).to.match(/^\\d{4}-\\d{2}-\\d{2}$/);","        }","    });","    moneyFields.forEach(function (field) {","        pm.expect(invoice.amounts[field]).to.be.a(\"string\").and.match(/^\\d+\\.\\d{2}$/);","    });","    pm.expect(invoice).to.not.have.property(\"allocations\");","    pm.expect(invoice.paymentHistory).to.be.an(\"array\");","    pm.expect(toCents(invoice.amounts.amountPaid) + toCents(invoice.amounts.amountDue)).to.eql(toCents(invoice.amounts.totalAmount));","","    const historyTotal = invoice.paymentHistory.reduce(function (sum, entry) {","        return sum + toCents(entry.amount);","    }, 0);","    pm.expect(historyTotal).to.eql(toCents(invoice.amounts.amountPaid));","","    invoice.paymentHistory.forEach(function (entry) {","        pm.expect(validHistoryTypes).to.include(entry.type);","        [\"guid\", \"invoiceGuid\", \"transactionId\", \"amount\", \"paymentMode\", \"paymentReference\", \"paymentDate\", \"status\", \"allocatedAt\"].forEach(function (field) {","            pm.expect(entry).to.have.property(field);","        });","        pm.expect(entry.paymentDate).to.match(/^\\d{4}-\\d{2}-\\d{2}$/);","        pm.expect(validHistoryStatuses).to.include(entry.status);","    });","});","pm.test(\"Regeneration history matches the public contract\", function () {","    pm.expect(invoice.regenerationHistory).to.be.an(\"array\").and.empty;","    invoice.regenerationHistory.forEach(function (history) {","        [\"reference\", \"dates\", \"regeneratedAt\", \"amount\"].forEach(function (field) {","            pm.expect(history).to.have.property(field);","            pm.expect(history).not.to.have.property(\"guid\");","            pm.expect(history).not.to.have.property(\"invoiceNumber\");","        });","        [\"invoiceDate\", \"fromDate\", \"toDate\"].forEach(function (field) {","            if (history.dates[field] !== null) {","                pm.expect(history.dates[field]).to.match(/^\\d{4}-\\d{2}-\\d{2}$/);","            }","        });","        pm.expect(history.amount).to.be.a(\"string\").and.match(/^\\d+\\.\\d{2}$/);","        if (history.regeneratedAt !== null) {","            pm.expect(history.regeneratedAt).to.match(/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$/);","        }","    });","});"],"type":"text/javascript"},"listen":"test"}],"id":"5117bef7-2add-7ad3-ff5c-ed5d32bb09a5","request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/enquiries/00000000-0000-4000-8000-000000000003/financials/invoices/00000000-0000-4000-8000-000000000002","description":"<p>Returns one current logical invoice raised against an enquiry before enrolment.</p>\n<h2 id=\"authorization\"><strong>Authorization</strong></h2>\n<p>Requires a valid Bearer token with both the <code>financials:read</code> and <code>enquiries:read</code> scopes.</p>\n<h2 id=\"path-parameters\"><strong>Path parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>enquiryGuid</code></td>\n<td>Yes</td>\n<td>Public UUIDv4 GUID of the enquiry.</td>\n</tr>\n<tr>\n<td><code>invoiceGuid</code></td>\n<td>Yes</td>\n<td>Public UUIDv4 GUID of an invoice returned by the invoice collection.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\"><strong>Response</strong></h2>\n<p>Returns invoice dates, payment status, invoice status, complete persisted amount breakdown, payment history, bill-payer snapshots, and persisted line items where available. Invoices without active persisted line-item rows return an empty <code>lineItems</code> array.</p>\n<p>Invoice dates use <code>YYYY-MM-DD</code> (or <code>null</code> where the platform has no date). Money values are decimal strings. <code>paymentStatus</code> is <code>PAID</code> or <code>PENDING_PAYMENT</code>, normalised from the invoice status stored by the platform.</p>\n<p><code>paymentHistory</code> contains both payment and credit entries shown in the platform's Invoice Payment History. Use <code>type</code> to distinguish them. Both types expose the transaction ID, amount, platform payment mode and reference, payment date, platform status, and allocation timestamp. <code>paymentMode</code> preserves the platform display value.</p>\n<p><code>amounts.amountPaid</code> includes both payment and credit entries allocated to the invoice, and <code>amounts.amountDue</code> is calculated from <code>totalAmount - amountPaid</code>.</p>\n<p><code>regenerationHistory</code> is returned as an empty array because enquiry invoice regeneration is not supported.</p>\n<h2 id=\"line-items\"><strong>Line items</strong></h2>\n<p>The invoice-detail response always includes a <code>lineItems</code> array. The same contract is used for monthly/actual, manual, equally spread, and deposit invoices. The array is empty when the invoice has no active persisted line-item rows; the API does not reconstruct missing historical rows.</p>\n<p>Line-item fields:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>guid</code></td>\n<td>Public line-item GUID, or <code>null</code> when the stored row has no GUID.</td>\n</tr>\n<tr>\n<td><code>type</code></td>\n<td><code>SESSION</code>, <code>PRODUCT</code>, or <code>HOLIDAY_REDUCTION</code>.</td>\n</tr>\n<tr>\n<td><code>description</code></td>\n<td>Line description from the persisted item snapshot.</td>\n</tr>\n<tr>\n<td><code>period</code></td>\n<td>Line period with <code>startDate</code> and <code>endDate</code>.</td>\n</tr>\n<tr>\n<td><code>serviceDays</code></td>\n<td>Dated schedule details for session lines; an empty array for other line types.</td>\n</tr>\n<tr>\n<td><code>quantity</code></td>\n<td><code>attended_hours</code> in <code>HOURS</code> for sessions; <code>item_quantity</code> in <code>ITEMS</code> for products and holiday reductions.</td>\n</tr>\n<tr>\n<td><code>unitPrice</code></td>\n<td>Session hourly rate from <code>item_hourly_rate</code>; product or holiday-reduction unit price from the persisted line item.</td>\n</tr>\n<tr>\n<td><code>discountPercent</code></td>\n<td>Percentage discount for the line, formatted as a two-decimal string.</td>\n</tr>\n<tr>\n<td><code>amounts</code></td>\n<td><code>grossAmount</code>, <code>fundingReduction</code>, <code>discount</code>, and <code>netAmount</code>, formatted as two-decimal strings.</td>\n</tr>\n<tr>\n<td><code>nominalCode</code></td>\n<td>Nested <code>code</code>, <code>name</code>, and <code>source</code> values. Unassigned lines return <code>code: null</code>, <code>name: null</code>, and <code>source: \"UNASSIGNED\"</code>.</td>\n</tr>\n<tr>\n<td><code>metadata</code></td>\n<td>Type-specific metadata. Session lines currently expose <code>fundedHours</code> and <code>chargeableHours</code>; product lines currently return an empty object.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"monthly-or-actual-invoice-line-items\"><strong>Monthly or actual invoice line items</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"lineItems\": [\n    {\n      \"guid\": \"00000000-0000-4000-8000-000000000010\",\n      \"type\": \"SESSION\",\n      \"description\": \"Full Day Session\",\n      \"period\": {\n        \"startDate\": \"2026-08-03\",\n        \"endDate\": \"2026-08-09\"\n      },\n      \"serviceDays\": [\n        {\n          \"date\": \"2026-08-05\",\n          \"day\": \"WEDNESDAY\",\n          \"description\": \"08:00-18:00\"\n        }\n      ],\n      \"quantity\": {\n        \"value\": \"10.00\",\n        \"unit\": \"HOURS\"\n      },\n      \"unitPrice\": \"8.19\",\n      \"discountPercent\": \"50.00\",\n      \"amounts\": {\n        \"grossAmount\": \"81.90\",\n        \"fundingReduction\": \"81.90\",\n        \"discount\": \"0.00\",\n        \"netAmount\": \"0.00\"\n      },\n      \"nominalCode\": {\n        \"code\": \"100102\",\n        \"name\": \"Fees for nursery services\",\n        \"source\": \"SESSION\"\n      },\n      \"metadata\": {\n        \"fundedHours\": \"10.00\",\n        \"chargeableHours\": \"0.00\"\n      }\n    },\n    {\n      \"guid\": \"00000000-0000-4000-8000-000000000011\",\n      \"type\": \"PRODUCT\",\n      \"description\": \"Staff Consumables FD\",\n      \"period\": {\n        \"startDate\": \"2026-08-03\",\n        \"endDate\": \"2026-08-09\"\n      },\n      \"serviceDays\": [],\n      \"quantity\": {\n        \"value\": \"1.00\",\n        \"unit\": \"ITEMS\"\n      },\n      \"unitPrice\": \"5.00\",\n      \"discountPercent\": \"0.00\",\n      \"amounts\": {\n        \"grossAmount\": \"5.00\",\n        \"fundingReduction\": \"0.00\",\n        \"discount\": \"0.00\",\n        \"netAmount\": \"5.00\"\n      },\n      \"nominalCode\": {\n        \"code\": null,\n        \"name\": null,\n        \"source\": \"UNASSIGNED\"\n      },\n      \"metadata\": {}\n    }\n  ]\n}\n\n</code></pre>\n<h3 id=\"manual-invoice-line-items\"><strong>Manual invoice line items</strong></h3>\n<p>Manual invoices use the same line-item shape. Their product lines normally use <code>ITEMS</code> quantity, product unit price, and an empty <code>metadata</code> object.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"lineItems\": [\n    {\n      \"guid\": \"00000000-0000-4000-8000-000000000012\",\n      \"type\": \"PRODUCT\",\n      \"description\": \"Registration Fee\",\n      \"period\": {\n        \"startDate\": \"2026-09-01\",\n        \"endDate\": \"2026-09-01\"\n      },\n      \"serviceDays\": [],\n      \"quantity\": {\n        \"value\": \"1.00\",\n        \"unit\": \"ITEMS\"\n      },\n      \"unitPrice\": \"50.00\",\n      \"discountPercent\": \"0.00\",\n      \"amounts\": {\n        \"grossAmount\": \"50.00\",\n        \"fundingReduction\": \"0.00\",\n        \"discount\": \"0.00\",\n        \"netAmount\": \"50.00\"\n      },\n      \"nominalCode\": {\n        \"code\": null,\n        \"name\": null,\n        \"source\": \"UNASSIGNED\"\n      },\n      \"metadata\": {}\n    }\n  ]\n}\n\n</code></pre>\n<h3 id=\"deposit-invoice-line-items\"><strong>Deposit invoice line items</strong></h3>\n<p>Deposit invoices use the same line-item shape as other invoice types. If persisted deposit line-item rows exist, they are returned in <code>data.lineItems</code>; otherwise the array is empty.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"lineItems\": [\n    {\n      \"guid\": \"00000000-0000-4000-8000-000000000013\",\n      \"type\": \"PRODUCT\",\n      \"description\": \"Deposit\",\n      \"period\": {\n        \"startDate\": \"2026-09-01\",\n        \"endDate\": \"2026-09-01\"\n      },\n      \"serviceDays\": [],\n      \"quantity\": {\n        \"value\": \"1.00\",\n        \"unit\": \"ITEMS\"\n      },\n      \"unitPrice\": \"200.00\",\n      \"discountPercent\": \"0.00\",\n      \"amounts\": {\n        \"grossAmount\": \"200.00\",\n        \"fundingReduction\": \"0.00\",\n        \"discount\": \"0.00\",\n        \"netAmount\": \"200.00\"\n      },\n      \"nominalCode\": {\n        \"code\": null,\n        \"name\": null,\n        \"source\": \"UNASSIGNED\"\n      },\n      \"metadata\": {}\n    }\n  ]\n}\n\n</code></pre>\n<h2 id=\"errors\"><strong>Errors</strong></h2>\n<ul>\n<li><p><code>401 Unauthorized</code>: missing, invalid, or expired access token.</p>\n</li>\n<li><p><code>403 Forbidden</code>: the token lacks <code>financials:read</code> or <code>enquiries:read</code>, or the requested enquiry is outside the client's permitted scope.</p>\n</li>\n<li><p><code>404 Not Found</code>: the requested enquiry or invoice does not exist or is not available to the authenticated client.</p>\n</li>\n<li><p><code>429 Too Many Requests</code>: financials rate limit exceeded.</p>\n</li>\n<li><p><code>500 Internal Server Error</code>: unexpected server failure.</p>\n</li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": {\n    \"guid\": \"00000000-0000-4000-8000-000000000002\",\n    \"invoiceNumber\": \"INV-2026-0001\",\n    \"invoiceType\": \"MONTHLY\",\n    \"dates\": {\n      \"invoiceDate\": \"2026-08-01\",\n      \"dueDate\": \"2026-08-15\",\n      \"fromDate\": \"2026-08-01\",\n      \"toDate\": \"2026-08-31\"\n    },\n    \"description\": \"Monthly Invoice for 01-08-2026 to 31-08-2026\",\n    \"reference\": \"ENQUIRY-001\",\n    \"paymentStatus\": \"PAID\",\n    \"invoiceStatus\": \"APPROVED\",\n    \"amounts\": {\n      \"grossAmount\": \"550.00\",\n      \"fundingReduction\": \"50.00\",\n      \"holidayReduction\": \"0.00\",\n      \"discount\": \"0.00\",\n      \"totalAmount\": \"500.00\",\n      \"amountPaid\": \"500.00\",\n      \"amountDue\": \"0.00\"\n    },\n    \"regenerationHistory\": [],\n    \"paymentHistory\": [\n      {\n        \"guid\": \"payment-history-guid\",\n        \"type\": \"PAYMENT\",\n        \"invoiceGuid\": \"00000000-0000-4000-8000-000000000002\",\n        \"transactionId\": 85926,\n        \"amount\": \"491.38\",\n        \"paymentMode\": \"eypay (Tax-Free Childcare)\",\n        \"paymentReference\": \"PAY-2026-0001\",\n        \"paymentDate\": \"2026-08-03\",\n        \"status\": \"PAID_OUT\",\n        \"allocatedAt\": \"2026-08-03 04:00:24\"\n      },\n      {\n        \"guid\": \"credit-history-guid\",\n        \"type\": \"CREDIT\",\n        \"invoiceGuid\": \"00000000-0000-4000-8000-000000000002\",\n        \"transactionId\": 97695,\n        \"amount\": \"8.62\",\n        \"paymentMode\": \"Xero Upload\",\n        \"paymentReference\": \".\",\n        \"paymentDate\": \"2026-07-01\",\n        \"status\": \"PROCESSED\",\n        \"allocatedAt\": \"2026-07-31 13:19:35\"\n      }\n    ],\n    \"locked\": true,\n    \"split\": false,\n    \"createdAt\": \"2026-08-01 08:00:00\",\n    \"updatedAt\": \"2026-08-05 10:00:00\",\n    \"currency\": \"GBP\",\n    \"billPayers\": [],\n    \"lineItems\": []\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n<h2 id=\"enquiry-invoice-behaviour\"><strong>Enquiry invoice behaviour</strong></h2>\n<p>These endpoints expose registration-fee and other invoices held against an enquiry before the child is enrolled. They require both the <code>financials:read</code> and <code>enquiries:read</code> scopes, plus access to the enquiry's nursery. Only invoice resources are exposed for enquiries; enquiry financial summaries, credits, payments, and transactions are intentionally not provided.</p>\n<p>When an enquiry is enrolled, its URN is transferred to the child. The original enquiry invoice remains available for audit, while any copied invoice is available through the child financial invoice endpoints.</p>\n","urlObject":{"path":["public/v1","enquiries","00000000-0000-4000-8000-000000000003","financials","invoices","00000000-0000-4000-8000-000000000002"],"host":["https://your-tenant.eylog.co.uk"],"query":[],"variable":[]}},"response":[],"_postman_id":"5117bef7-2add-7ad3-ff5c-ed5d32bb09a5"}],"id":"a178608f-7d98-85cc-8843-dc4aa73ee350","_postman_id":"a178608f-7d98-85cc-8843-dc4aa73ee350","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}}},{"name":"Get Nursery Lookups","id":"a49451e3-43d5-47ce-bfd9-596f2a82a326","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1/lookups?domains=enquiryReason,enquirySource,enquiryContactedVia","description":"<h2 id=\"get-nursery-lookups\">Get Nursery Lookups</h2>\n<p>Returns configured lookup values for one nursery. Use this endpoint to obtain GUIDs for enquiry fields such as <code>reason</code>, <code>source</code>, and <code>contactedVia</code>.</p>\n<h3 id=\"authorization\">Authorization</h3>\n<p>Requires a Bearer token. All supported domains require <code>enquiries:read</code>.</p>\n<h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>domains</code></td>\n<td>Yes</td>\n<td>Comma-separated lookup domains. Duplicate values are ignored.</td>\n<td><code>enquiryReason</code>, <code>enquirySource</code>, <code>enquiryContactedVia</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"domain-details\">Domain details</h3>\n<ul>\n<li>Each item contains a public GUID and display name.</li>\n<li><code>enquirySource</code> only returns options enabled for Public API use.</li>\n<li>Preferred sessions are available from <code>GET /nurseries/{guid}/sessions?type=enquiry</code>.</li>\n</ul>\n<h3 id=\"errors\">Errors</h3>\n<ul>\n<li><code>400 Bad Request</code>: missing, malformed, or unsupported domains.</li>\n<li><code>401 Unauthorized</code>: missing, expired, or invalid Bearer token.</li>\n<li><code>403 Forbidden</code>: token lacks the required scope or cannot access the nursery.</li>\n<li><code>404 Not Found</code>: nursery does not exist or is inactive.</li>\n<li><code>429 Too Many Requests</code>: lookup rate limit exceeded.</li>\n</ul>\n<p>The lookup rate limit is shared under the independent Lookups API capability.</p>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": {\n    \"enquiryReason\": [\n      {\n        \"guid\": \"8bed12d6-8d39-420d-aa4a-b69aac89fb1f\",\n        \"name\": \"After school care\"\n      }\n    ],\n    \"enquirySource\": [\n      {\n        \"guid\": \"52c5c023-cb9b-4027-bf67-d06a1ead35e8\",\n        \"name\": \"College/Uni/NHS\"\n      }\n    ],\n    \"enquiryContactedVia\": [\n      {\n        \"guid\": \"ea1aa268-2e7b-428b-b4cd-8fecba36fb05\",\n        \"name\": \"E-mail\"\n      }\n    ]\n  },\n  \"correlationId\": \"6a3e904c-407f-4ea3-aab5-2c8a913e7ef2\",\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1","lookups"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"description":{"content":"<p>Comma-separated lookup domains. Duplicate values are ignored. Possible values: <code>enquiryReason</code>, <code>enquirySource</code>, <code>enquiryContactedVia</code>.</p>\n","type":"text/plain"},"key":"domains","value":"enquiryReason,enquirySource,enquiryContactedVia"}],"variable":[]}},"response":[],"_postman_id":"a49451e3-43d5-47ce-bfd9-596f2a82a326"},{"name":"Get Nursery Lookup","id":"32ca6003-ff08-45da-b2b5-ee14c353937b","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1/lookups/enquiryReason","description":"<h2 id=\"get-nursery-lookup-domain\">Get Nursery Lookup Domain</h2>\n<p>Returns lookup values for one requested domain in a nursery.</p>\n<h3 id=\"authorization\">Authorization</h3>\n<p>Requires a Bearer token. All supported domains require <code>enquiries:read</code>.</p>\n<h3 id=\"path-parameters\">Path parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>nurseryId</code></td>\n<td>Yes</td>\n<td>Public UUIDv4 GUID of the nursery.</td>\n</tr>\n<tr>\n<td><code>lookupDomain</code></td>\n<td>Yes</td>\n<td>Case-sensitive lookup domain.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Supported values: <code>enquiryReason</code>, <code>enquirySource</code>, <code>enquiryContactedVia</code>.</p>\n<h3 id=\"example\">Example</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-http\">GET https://your-tenant.eylog.co.uk/public/v1/nurseries/1/lookups/enquiryReason\n</code></pre>\n<h3 id=\"notes\">Notes</h3>\n<ul>\n<li><code>enquirySource</code> returns only options enabled for Public API use.</li>\n<li>Preferred sessions are available from <code>GET /nurseries/{guid}/sessions?type=enquiry</code>.</li>\n</ul>\n<h3 id=\"errors\">Errors</h3>\n<ul>\n<li><code>400 Bad Request</code>: malformed or unsupported domain.</li>\n<li><code>401 Unauthorized</code>: missing, expired, or invalid Bearer token.</li>\n<li><code>403 Forbidden</code>: missing required scope or nursery access.</li>\n<li><code>404 Not Found</code>: nursery does not exist or is inactive.</li>\n<li><code>429 Too Many Requests</code>: shared lookup rate limit exceeded.</li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"8bed12d6-8d39-420d-aa4a-b69aac89fb1f\",\n      \"name\": \"After school care\"\n    }\n  ],\n  \"correlationId\": \"6a3e904c-407f-4ea3-aab5-2c8a913e7ef2\",\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"The requested resource was not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1","lookups","enquiryReason"],"host":["https://your-tenant.eylog.co.uk"],"query":[],"variable":[]}},"response":[],"_postman_id":"32ca6003-ff08-45da-b2b5-ee14c353937b"},{"name":"Create Enquiry","id":"1c08ef08-fbbd-4f0d-98b9-2a0252ba8de4","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"parent\": {\n    \"firstName\": \"Example\",\n    \"lastName\": \"Parent\",\n    \"email\": \"customer@example.com\",\n    \"mobile\": \"+44 7700 900000\",\n    \"address\": {\n      \"address1\": \"Example Street\",\n      \"address2\": \"Example Town\",\n      \"postcode\": \"AB1 2CD\"\n    }\n  },\n  \"child\": {\n    \"firstName\": \"Example\",\n    \"lastName\": \"Child\",\n    \"dob\": \"2022-06-15\",\n    \"startDate\": \"2026-09-01\"\n  },\n  \"preferredSession\": [\n    {\n      \"guid\": \"4e7d4548-bcab-4c70-8478-b552fbdbfb4c\",\n      \"days\": [\"Monday\", \"Tuesday\"]\n    }\n  ],\n  \"requestedHours\": 30,\n  \"reason\": {\n    \"text\": \"Need flexible hours\"\n  },\n  \"source\": {\n    \"text\": \"Local newsletter\"\n  },\n  \"contactedVia\": {\n    \"text\": \"Community event\"\n  },\n  \"notes\": \"Interested in three full days per week.\",\n  \"utm\": {\n    \"medium\": \"cpc\",\n    \"source\": \"google\",\n    \"campaign\": \"autumn-enquiries\",\n    \"content\": \"search-ad\",\n    \"term\": \"local nursery\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://your-tenant.eylog.co.uk/public/v1/nurseries/1/enquiries","description":"<h2 id=\"create-enquiry\">Create Enquiry</h2>\n<p>Creates a new enquiry for a nursery and returns the complete enquiry record.</p>\n<h3 id=\"endpoint\">Endpoint</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-http\">POST https://your-tenant.eylog.co.uk/public/v1/nurseries/1/enquiries\n</code></pre>\n<p><code>1</code> is the nursery UUIDv4 GUID.</p>\n<h3 id=\"authentication\">Authentication</h3>\n<p>Send a valid Bearer token with the <code>enquiries:write</code> scope.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Authorization</code></td>\n<td><code>Bearer </code></td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td><code>application/json</code></td>\n</tr>\n<tr>\n<td><code>Content-Type</code></td>\n<td><code>application/json</code></td>\n</tr>\n</tbody>\n</table>\n</div><p>The endpoint is rate-limited to 30 requests per minute per client and nursery.</p>\n<h3 id=\"field-rules\">Field rules</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Rules</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>parent.firstName</code></td>\n<td>Required. Plain text only.</td>\n</tr>\n<tr>\n<td><code>parent.lastName</code></td>\n<td>Optional. Plain text only.</td>\n</tr>\n<tr>\n<td><code>parent.email</code></td>\n<td>Required. Must be a valid email address.</td>\n</tr>\n<tr>\n<td><code>parent.mobile</code></td>\n<td>Optional.</td>\n</tr>\n<tr>\n<td><code>parent.address</code></td>\n<td>Optional object containing <code>address1</code>, <code>address2</code>, and <code>postcode</code>.</td>\n</tr>\n<tr>\n<td><code>child.firstName</code></td>\n<td>Required. Plain text only.</td>\n</tr>\n<tr>\n<td><code>child.lastName</code></td>\n<td>Required. Plain text only.</td>\n</tr>\n<tr>\n<td><code>child.dob</code></td>\n<td>Optional <code>YYYY-MM-DD</code>; future dates are allowed to match the web flow.</td>\n</tr>\n<tr>\n<td><code>child.startDate</code></td>\n<td>Optional <code>YYYY-MM-DD</code>; must be on or after DOB when DOB is provided, otherwise it cannot be before today.</td>\n</tr>\n<tr>\n<td><code>preferredSession</code></td>\n<td>Optional array of preferred sessions.</td>\n</tr>\n<tr>\n<td><code>preferredSession[].guid</code></td>\n<td>Valid session UUID for this nursery.</td>\n</tr>\n<tr>\n<td><code>preferredSession[].days</code></td>\n<td>Optional list of unique values from Sunday to Saturday. Empty arrays are supported when day selection is not required. When days are provided, each must be an operating day for the nursery.</td>\n</tr>\n<tr>\n<td><code>requestedHours</code></td>\n<td>Optional JSON number, zero or greater, rounded to two decimals. Numeric strings and booleans are rejected.</td>\n</tr>\n<tr>\n<td><code>reason</code>, <code>source</code>, <code>contactedVia</code></td>\n<td>Optional. Supply exactly one of <code>guid</code> or <code>text</code>.</td>\n</tr>\n<tr>\n<td><code>*.guid</code></td>\n<td>Existing configured option UUID. <code>source.guid</code> must be enabled for Public API use.</td>\n</tr>\n<tr>\n<td><code>*.text</code></td>\n<td>Up to 255 characters. The API reuses an active option with the same trimmed, case-insensitive name, or creates a new option.</td>\n</tr>\n<tr>\n<td><code>notes</code></td>\n<td>Optional plain text, maximum 5,000 characters.</td>\n</tr>\n<tr>\n<td><code>utm</code></td>\n<td>Optional object with <code>medium</code>, <code>source</code>, <code>campaign</code>, <code>content</code>, and <code>term</code>; each is optional and limited to 255 characters.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Unknown request fields are rejected.</p>\n<h3 id=\"session-and-hours-behaviour\">Session and hours behaviour</h3>\n<ul>\n<li>Omit <code>requestedHours</code> to calculate requested hours and expected FTE from preferred sessions.</li>\n<li>Supply <code>requestedHours</code>, including <code>0</code>, to override the session calculation.</li>\n<li>When overridden, <code>expectedFte</code> is returned as <code>0.0</code>.</li>\n<li>Selected sessions are additive. Overlapping session times are accepted and contribute independently.</li>\n</ul>\n<h3 id=\"reference-values\">Reference values</h3>\n<p>Use the enquiry lookup endpoints for reason, source, and contact-method GUIDs. Use <code>GET /nurseries/{guid}/sessions?type=enquiry</code> for preferred-session GUIDs.</p>\n<p>For free-text reason, source, or contact method, the API stores a normal configured option and links the enquiry to it. It does not store a separate free-text value on the enquiry.</p>\n<h3 id=\"success-response\">Success response</h3>\n<p>Returns <code>201 Created</code>. The <code>data</code> object has the same structure as <code>GET https://your-tenant.eylog.co.uk/public/v1/enquiries/1</code>. Response <code>notes</code> is the completed note-activity history, newest first; the submitted request note becomes its first item.</p>\n<h3 id=\"errors\">Errors</h3>\n<ul>\n<li><code>400 Bad Request</code>: invalid JSON, invalid field value, unsupported field, invalid UUID, unavailable session, or invalid configured option.</li>\n<li><code>401 Unauthorized</code>: missing, invalid, or expired access token.</li>\n<li><code>403 Forbidden</code>: token lacks <code>enquiries:write</code>, nursery access is forbidden, or tenant cancellation is effective.</li>\n<li><code>404 Not Found</code>: nursery does not exist or is not available to the authenticated client.</li>\n<li><code>429 Too Many Requests</code>: rate limit exceeded.</li>\n<li><code>500 Internal Server Error</code>: unexpected server failure.</li>\n</ul>\n<p>Validation failures use the standard Public API envelope and return a specific client-safe message.</p>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-201\"><strong>Success (201)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 201,\n  \"message\": \"Created\",\n  \"data\": {\n    \"guid\": \"0d3133f3-3adb-423b-a7a9-21bf19538290\",\n    \"nursery\": {\n      \"guid\": \"d8596f6d-c76a-498b-8063-47ecb88eebd1\",\n      \"name\": \"eyworks Nursery\"\n    },\n    \"parent\": {\n      \"title\": \"\",\n      \"firstName\": \"Example\",\n      \"lastName\": \"Customer\",\n      \"email\": \"customer@example.com\",\n      \"mobile\": \"+44 7700 900000\",\n      \"homePhone\": \"+44 7700 900000\",\n      \"address\": {\n        \"address1\": \"Example Street\",\n        \"address2\": \"Example Town\",\n        \"postcode\": \"EX1 1AB\"\n      }\n    },\n    \"child\": {\n      \"firstName\": \"Example\",\n      \"lastName\": \"Customer\",\n      \"dob\": \"2022-06-15\",\n      \"startDate\": \"2026-09-01\",\n      \"gender\": \"\"\n    },\n    \"enquiryDate\": \"2026-07-30\",\n    \"bookingType\": \"\",\n    \"room\": {\n      \"guid\": \"b00cbb1f-92b7-405c-8da1-e585eb7eb592\",\n      \"name\": \"Giant Giraffes\"\n    },\n    \"requestedHours\": 24.5,\n    \"expectedFte\": 0,\n    \"contactedVia\": \"Email\",\n    \"source\": \"Existing Parent\",\n    \"specialOffer\": \"\",\n    \"reason\": \"Part time care\",\n    \"notes\": \"Example note\",\n    \"statusInfo\": {\n      \"stage\": \"ENQUIRY_IN\",\n      \"status\": \"NOT_ENROLLED\",\n      \"lostReason\": \"\",\n      \"lostReasonNotes\": \"\"\n    },\n    \"stageMovements\": {\n      \"ENQUIRY_IN\": \"2026-07-30T13:07:14Z\",\n      \"PRE_VISIT_FOLLOW_UP\": null,\n      \"VISIT\": null,\n      \"POST_VISIT_FOLLOW_UP\": null,\n      \"WAITLISTED\": null,\n      \"REGISTRATION_FORM\": null\n    },\n    \"brochureGiven\": false,\n    \"unsubscribeMailingList\": false,\n    \"utm\": {\n      \"medium\": \"cpc\",\n      \"source\": \"google\",\n      \"campaign\": \"autumn-enquiries\",\n      \"content\": \"search-ad\",\n      \"term\": \"local nursery\"\n    },\n    \"createdAt\": \"2026-07-30 13:07:14\",\n    \"updatedAt\": null\n  },\n  \"correlationId\": \"19dc176b-11d8-4f85-aa62-41ee46548105\",\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-400\"><strong>Error (400)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 400,\n  \"message\": \"Bad Request\",\n  \"errors\": [\n    \"Invalid request data.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","nurseries","1","enquiries"],"host":["https://your-tenant.eylog.co.uk"],"query":[],"variable":[]}},"response":[],"_postman_id":"1c08ef08-fbbd-4f0d-98b9-2a0252ba8de4"},{"name":"Get Enquiry","id":"f479b8c2-5aba-410b-a9f6-b26402c1e333","request":{"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/enquiries/1","description":"<p>Returns details for a single enquiry.</p>\n<p>Path params:</p>\n<ul>\n<li>enquiryId</li>\n</ul>\n<p>Response:</p>\n<ul>\n<li><code>data</code></li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": {\n    \"guid\": \"55555555-5555-4555-8555-555555555555\",\n    \"nursery\": {\n      \"guid\": \"22222222-2222-4222-8222-222222222222\",\n      \"name\": \"eyworks - Nursery A\"\n    },\n    \"parent\": {\n      \"title\": \"Mr\",\n      \"firstName\": \"Example\",\n      \"lastName\": \"Customer\",\n      \"email\": \"customer@example.com\",\n      \"mobile\": \"+44 7700 900000\",\n      \"homePhone\": \"+44 7700 900000\",\n      \"address\": {\n        \"address1\": \"Example Street\",\n        \"address2\": \"Example Town\",\n        \"postcode\": \"EX1 1AB\"\n      }\n    },\n    \"child\": {\n      \"firstName\": \"Example\",\n      \"lastName\": \"Customer\",\n      \"dob\": \"2024-10-25\",\n      \"startDate\": \"2025-09-01\",\n      \"gender\": \"Male\"\n    },\n    \"enquiryDate\": \"2025-04-02\",\n    \"bookingType\": \"EMERGENCY BOOKER\",\n    \"room\": {\n      \"guid\": \"66666666-6666-4666-8666-666666666666\",\n      \"name\": \"Baby Room\"\n    },\n    \"requestedHours\": 30,\n    \"expectedFte\": 0.6,\n    \"contactedVia\": \"E-mail\",\n    \"source\": \"\",\n    \"specialOffer\": \"\",\n    \"reason\": \"\",\n    \"notes\": \"Example note\",\n    \"tags\": [\n      {\n        \"guid\": \"77777777-7777-4777-8777-777777777777\",\n        \"name\": \"Priority\"\n      }\n    ],\n    \"statusInfo\": {\n      \"stage\": \"REGISTRATION_FORM\",\n      \"status\": \"WAITLISTED\",\n      \"lostReason\": \"\",\n      \"lostReasonNotes\": \"\"\n    },\n    \"stageMovements\": {\n      \"ENQUIRY_IN\": \"2025-04-02T09:55:33Z\",\n      \"PRE_VISIT_FOLLOW_UP\": \"2025-04-04T10:30:00Z\",\n      \"VISIT\": \"2025-04-08T13:00:00Z\",\n      \"POST_VISIT_FOLLOW_UP\": \"2025-04-09T09:15:00Z\",\n      \"WAITLISTED\": \"2025-04-10T14:45:00Z\",\n      \"REGISTRATION_FORM\": \"2025-04-14T11:20:00Z\"\n    },\n    \"brochureGiven\": false,\n    \"unsubscribeMailingList\": false,\n    \"utm\": {\n      \"medium\": \"\",\n      \"source\": \"\",\n      \"campaign\": \"\",\n      \"content\": \"\",\n      \"term\": \"\"\n    },\n    \"createdAt\": \"2025-04-02 09:55:33\",\n    \"updatedAt\": \"2026-02-23 16:38:51\"\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"Enquiry not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"path":["public/v1","enquiries","1"],"host":["https://your-tenant.eylog.co.uk"],"query":[],"variable":[]}},"response":[],"_postman_id":"f479b8c2-5aba-410b-a9f6-b26402c1e333"}],"id":"dacd0040-fe31-45fc-92ee-7f1c7a98ac0a","_postman_id":"dacd0040-fe31-45fc-92ee-7f1c7a98ac0a","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}}},{"name":"Financials","item":[{"name":"Get Child Financials Summary","event":[{"script":{"exec":["// Use an existing valid financials token, or obtain one immediately before the request.","const existingToken = pm.environment.get(\"accessToken\") || pm.collectionVariables.get(\"accessToken\");","","function hasFinancialsAccess(token) {","    try {","        const payload = JSON.parse(atob(token.split(\".\")[1]));","        return payload.exp > Math.floor(Date.now() / 1000) + 60 &&","            Array.isArray(payload.scope) &&","            payload.scope.includes(\"financials:read\");","    } catch (error) {","        return false;","    }","}","","function applyToken(token) {","    pm.request.headers.upsert({","        key: \"Authorization\",","        value: \"Bearer \" + token","    });","}","","if (hasFinancialsAccess(existingToken)) {","    applyToken(existingToken);","} else {","    pm.sendRequest({","        url: pm.variables.replaceIn(\"https://your-tenant.eylog.co.uk/public/v1/oauth/token\"),","        method: \"POST\",","        header: {","            \"Content-Type\": \"application/json\",","            \"Accept\": \"application/json\"","        },","        body: {","            mode: \"raw\",","            raw: JSON.stringify({","                grantType: \"client_credentials\",","                clientId: pm.environment.get(\"clientId\"),","                clientSecret: pm.environment.get(\"clientSecret\")","            })","        }","    }, function (error, response) {","        if (error) {","            throw error;","        }","        const json = response.json();","        if (!json.data || !json.data.accessToken) {","            throw new Error(\"Unable to obtain a valid financials access token\");","        }","        pm.environment.set(\"accessToken\", json.data.accessToken);","        pm.collectionVariables.set(\"accessToken\", json.data.accessToken);","        applyToken(json.data.accessToken);","    });","}"],"type":"text/javascript"},"listen":"prerequest"}],"id":"78e6a34e-6015-442d-a0e9-d840e3619de0","request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/children/00000000-0000-4000-8000-000000000001/financials","description":"<p>Returns the current child-scoped account summary.</p>\n<h2 id=\"authorization\"><strong>Authorization</strong></h2>\n<p>Requires a valid Bearer token with the <code>financials:read</code> scope.</p>\n<h2 id=\"path-parameters\"><strong>Path parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>childGuid</code></td>\n<td>Yes</td>\n<td>Public UUIDv4 GUID of the child.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\"><strong>Response</strong></h2>\n<ul>\n<li><p><code>data.invoices</code> contains invoice totals and applied amounts.</p>\n</li>\n<li><p><code>data.credits</code> contains usable non-deposit credit totals only; deposit records are excluded from <code>totalAmount</code>, <code>allocatedAmount</code>, and <code>unallocatedAmount</code>.</p>\n</li>\n<li><p><code>data.deposits</code> contains held deposits and is reported separately. Deposits do not reduce invoice <code>paymentsApplied</code>, <code>amountDue</code>, or the account balance.</p>\n</li>\n<li><p><code>data.balance.direction</code> is <code>DEBIT</code>, <code>CREDIT</code>, or <code>ZERO</code>.</p>\n</li>\n<li><p><code>data.asOf</code> identifies the snapshot time.</p>\n</li>\n</ul>\n<p>This endpoint is not paginated. Replace <code>childGuid</code> with a GUID returned by the Children endpoints.</p>\n<p>Money values are decimal strings and the currency is returned in <code>data.currency</code>.</p>\n<h2 id=\"errors\"><strong>Errors</strong></h2>\n<ul>\n<li><p><code>401 Unauthorized</code>: missing, invalid, or expired access token.</p>\n</li>\n<li><p><code>403 Forbidden</code>: the token lacks <code>financials:read</code> or the requested child is outside the client's permitted scope.</p>\n</li>\n<li><p><code>404 Not Found</code>: the requested child or invoice does not exist or is not available to the authenticated client.</p>\n</li>\n<li><p><code>429 Too Many Requests</code>: financials rate limit exceeded.</p>\n</li>\n<li><p><code>500 Internal Server Error</code>: unexpected server failure.</p>\n</li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": {\n    \"childGuid\": \"00000000-0000-4000-8000-000000000001\",\n    \"currency\": \"GBP\",\n    \"balance\": {\n      \"amount\": \"150.00\",\n      \"direction\": \"DEBIT\"\n    },\n    \"invoices\": {\n      \"totalAmount\": \"500.00\",\n      \"paymentsApplied\": \"350.00\",\n      \"creditsApplied\": \"0.00\",\n      \"amountDue\": \"150.00\"\n    },\n    \"credits\": {\n      \"totalAmount\": \"25.00\",\n      \"allocatedAmount\": \"10.00\",\n      \"unallocatedAmount\": \"15.00\"\n    },\n    \"deposits\": {\n      \"totalAmount\": \"15.00\",\n      \"allocatedAmount\": \"0.00\",\n      \"unallocatedAmount\": \"15.00\"\n    },\n    \"asOf\": \"2026-08-26T09:00:00Z\"\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n<h3 id=\"error-404\"><strong>Error (404)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": false,\n  \"code\": 404,\n  \"message\": \"Not Found\",\n  \"errors\": [\n    \"Child not found.\"\n  ],\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n","urlObject":{"path":["public/v1","children","00000000-0000-4000-8000-000000000001","financials"],"host":["https://your-tenant.eylog.co.uk"],"query":[],"variable":[]}},"response":[],"_postman_id":"78e6a34e-6015-442d-a0e9-d840e3619de0"},{"name":"List Child Financial Invoices","event":[{"script":{"exec":["// Use an existing valid financials token, or obtain one immediately before the request.","const existingToken = pm.environment.get(\"accessToken\") || pm.collectionVariables.get(\"accessToken\");","","function hasFinancialsAccess(token) {","    try {","        const payload = JSON.parse(atob(token.split(\".\")[1]));","        return payload.exp > Math.floor(Date.now() / 1000) + 60 &&","            Array.isArray(payload.scope) &&","            payload.scope.includes(\"financials:read\");","    } catch (error) {","        return false;","    }","}","","function applyToken(token) {","    pm.request.headers.upsert({","        key: \"Authorization\",","        value: \"Bearer \" + token","    });","}","","if (hasFinancialsAccess(existingToken)) {","    applyToken(existingToken);","} else {","    pm.sendRequest({","        url: pm.variables.replaceIn(\"https://your-tenant.eylog.co.uk/public/v1/oauth/token\"),","        method: \"POST\",","        header: {","            \"Content-Type\": \"application/json\",","            \"Accept\": \"application/json\"","        },","        body: {","            mode: \"raw\",","            raw: JSON.stringify({","                grantType: \"client_credentials\",","                clientId: pm.environment.get(\"clientId\"),","                clientSecret: pm.environment.get(\"clientSecret\")","            })","        }","    }, function (error, response) {","        if (error) {","            throw error;","        }","        const json = response.json();","        if (!json.data || !json.data.accessToken) {","            throw new Error(\"Unable to obtain a valid financials access token\");","        }","        pm.environment.set(\"accessToken\", json.data.accessToken);","        pm.collectionVariables.set(\"accessToken\", json.data.accessToken);","        applyToken(json.data.accessToken);","    });","}"],"type":"text/javascript","id":"521c71e5-c77b-40ec-8c00-ad3547b49665"},"listen":"prerequest"},{"script":{"exec":["pm.test(\"Standard success envelope is returned\", function () {","    pm.response.to.have.status(200);","    const body = pm.response.json();","    pm.expect(body.status).to.eql(true);","    pm.expect(body.code).to.eql(200);","    pm.expect(body.data).to.be.an(\"array\");","    pm.expect(body.metadata.pagination).to.be.an(\"object\");","});","","const body = pm.response.json();","const moneyFields = [\"grossAmount\", \"fundingReduction\", \"holidayReduction\", \"discount\", \"totalAmount\", \"amountPaid\", \"amountDue\"];","const validPaymentStatuses = [\"PAID\", \"PENDING_PAYMENT\"];","const validHistoryTypes = [\"PAYMENT\", \"CREDIT\"];","const validHistoryStatuses = [\"PAID_OUT\", \"PROCESSED\", \"POSTED\", \"PENDING\", \"FAILED\", \"CANCELLED\", \"REVERSED\"];","const toCents = function (value) { return Math.round(Number(value) * 100); };","","body.data.forEach(function (invoice, index) {","    pm.test(\"Invoice \" + index + \" uses the public financial contract\", function () {","        pm.expect(validPaymentStatuses).to.include(invoice.paymentStatus);","        [\"invoiceDate\", \"dueDate\", \"fromDate\", \"toDate\"].forEach(function (field) {","            if (invoice.dates[field] !== null) {","                pm.expect(invoice.dates[field]).to.match(/^\\d{4}-\\d{2}-\\d{2}$/);","            }","        });","        moneyFields.forEach(function (field) {","            pm.expect(invoice.amounts[field]).to.be.a(\"string\").and.match(/^\\d+\\.\\d{2}$/);","        });","        pm.expect(invoice).to.not.have.property(\"allocations\");","        pm.expect(invoice.paymentHistory).to.be.an(\"array\");","        pm.expect(toCents(invoice.amounts.amountPaid) + toCents(invoice.amounts.amountDue)).to.eql(toCents(invoice.amounts.totalAmount));","        const historyTotal = invoice.paymentHistory.reduce(function (sum, entry) {","            return sum + toCents(entry.amount);","        }, 0);","        pm.expect(historyTotal).to.eql(toCents(invoice.amounts.amountPaid));","        invoice.paymentHistory.forEach(function (entry) {","            pm.expect(validHistoryTypes).to.include(entry.type);","            [\"guid\", \"invoiceGuid\", \"transactionId\", \"amount\", \"paymentMode\", \"paymentReference\", \"paymentDate\", \"status\", \"allocatedAt\"].forEach(function (field) {","                pm.expect(entry).to.have.property(field);","            });","            pm.expect(entry.paymentDate).to.match(/^\\d{4}-\\d{2}-\\d{2}$/);","            pm.expect(validHistoryStatuses).to.include(entry.status);","        });","    });","});","body.data.forEach(function (invoice, index) {","    pm.test(\"Invoice \" + index + \" regeneration history matches the public contract\", function () {","        pm.expect(invoice.regenerationHistory).to.be.an(\"array\");","        invoice.regenerationHistory.forEach(function (history) {","            [\"reference\", \"dates\", \"regeneratedAt\", \"amount\"].forEach(function (field) {","                pm.expect(history).to.have.property(field);","            pm.expect(history).not.to.have.property(\"guid\");","            pm.expect(history).not.to.have.property(\"invoiceNumber\");","            });","            [\"invoiceDate\", \"fromDate\", \"toDate\"].forEach(function (field) {","                if (history.dates[field] !== null) {","                    pm.expect(history.dates[field]).to.match(/^\\d{4}-\\d{2}-\\d{2}$/);","                }","            });","            pm.expect(history.amount).to.be.a(\"string\").and.match(/^\\d+\\.\\d{2}$/);","            if (history.regeneratedAt !== null) {","            pm.expect(history.regeneratedAt).to.match(/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$/);","            }","        });","    });","});"],"type":"text/javascript","id":"1db6e9f4-47a1-409a-a5e7-4eacc80be25e"},"listen":"test"}],"id":"aaf636b7-4866-4b73-b545-e519c0de91c0","request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/children/00000000-0000-4000-8000-000000000001/financials/invoices?page=1&pageSize=25","description":"<p>Returns the current logical invoices for a child.</p>\n<h2 id=\"authorization\"><strong>Authorization</strong></h2>\n<p>Requires a valid Bearer token with the <code>financials:read</code> scope.</p>\n<h2 id=\"path-parameters\"><strong>Path parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>childGuid</code></td>\n<td>Yes</td>\n<td>Public UUIDv4 GUID of the child.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"query-parameters\"><strong>Query parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n<th>Possible values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>status</code></td>\n<td>No</td>\n<td>Filter by invoice payment status.</td>\n<td><code>PENDING_PAYMENT</code>, <code>PAID</code>.</td>\n</tr>\n<tr>\n<td><code>page</code></td>\n<td>No</td>\n<td>One-based page number. Defaults to <code>1</code>.</td>\n<td>Positive integer (<code>1</code> or greater).</td>\n</tr>\n<tr>\n<td><code>pageSize</code></td>\n<td>No</td>\n<td>Number of records per page. Defaults to <code>50</code>.</td>\n<td>Integer from <code>1</code> to <code>100</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\"><strong>Response</strong></h2>\n<p>Returns posted, non-deleted logical invoices and excludes credit records, regenerated predecessors, and V3 line items. Invoice dates use <code>YYYY-MM-DD</code> (or <code>null</code> where the platform has no date). Money values are decimal strings.</p>\n<p><code>paymentStatus</code> is <code>PAID</code> or <code>PENDING_PAYMENT</code>, normalised from the invoice status stored by the platform.</p>\n<p><code>paymentHistory</code> contains both payment and credit entries shown in the platform's Invoice Payment History. Use <code>type</code> to distinguish them. Both types expose the transaction ID, amount, platform payment mode and reference, payment date, platform status, and allocation timestamp. <code>paymentMode</code> preserves the platform display value, for example <code>eypay (Tax-Free Childcare)</code> or <code>Xero Upload</code>.</p>\n<p><code>amounts.amountPaid</code> includes both payment and credit entries allocated to the invoice; deposits are not treated as payments unless the platform has allocated them as an invoice credit.</p>\n<p><code>regenerationHistory</code> contains non-deleted physical invoice predecessors marked as regenerated by the platform. It is an empty array when no regeneration has occurred. The current invoice remains the only invoice row in the list; predecessors are represented only as history metadata. Each history entry includes the reference, dates, amount, and <code>regeneratedAt</code> in BST/local <code>Y-m-d H:i:s</code> format; the current invoice's <code>guid</code> and <code>invoiceNumber</code> are not duplicated in history entries. Internal IDs and platform navigation URLs are not exposed.</p>\n<h2 id=\"errors\"><strong>Errors</strong></h2>\n<ul>\n<li><code>401 Unauthorized</code>: missing, invalid, or expired access token.</li>\n<li><code>403 Forbidden</code>: the token lacks <code>financials:read</code> or the requested child is outside the client's permitted scope.</li>\n<li><code>404 Not Found</code>: the requested child does not exist or is not available to the authenticated client.</li>\n<li><code>429 Too Many Requests</code>: financials rate limit exceeded.</li>\n<li><code>500 Internal Server Error</code>: unexpected server failure.</li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"00000000-0000-4000-8000-000000000002\",\n      \"invoiceNumber\": \"INV-2026-0001\",\n      \"invoiceType\": \"MONTHLY\",\n      \"dates\": {\n        \"invoiceDate\": \"2026-08-01\",\n        \"dueDate\": \"2026-08-15\",\n        \"fromDate\": \"2026-08-01\",\n        \"toDate\": \"2026-08-31\"\n      },\n      \"description\": \"Monthly Invoice for 01-08-2026 to 31-08-2026\",\n      \"reference\": \"CHILD-001\",\n      \"paymentStatus\": \"PAID\",\n      \"invoiceStatus\": \"APPROVED\",\n      \"amounts\": {\n        \"grossAmount\": \"550.00\",\n        \"fundingReduction\": \"50.00\",\n        \"holidayReduction\": \"0.00\",\n        \"discount\": \"0.00\",\n        \"totalAmount\": \"500.00\",\n        \"amountPaid\": \"500.00\",\n        \"amountDue\": \"0.00\"\n      },\n      \"regenerationHistory\": [\n        {\n          \"reference\": \"REF-10024\",\n          \"dates\": {\n            \"invoiceDate\": \"2026-07-01\",\n            \"fromDate\": \"2026-06-01\",\n            \"toDate\": \"2026-06-30\"\n          },\n          \"regeneratedAt\": \"2026-07-02 10:00:00\",\n          \"amount\": \"800.00\"\n        }\n      ],\n      \"paymentHistory\": [\n        {\n          \"guid\": \"payment-history-guid\",\n          \"type\": \"PAYMENT\",\n          \"invoiceGuid\": \"00000000-0000-4000-8000-000000000002\",\n          \"transactionId\": 85926,\n          \"amount\": \"491.38\",\n          \"paymentMode\": \"eypay (Tax-Free Childcare)\",\n          \"paymentReference\": \"PAY-2026-0001\",\n          \"paymentDate\": \"2026-08-03\",\n          \"status\": \"PAID_OUT\",\n          \"allocatedAt\": \"2026-08-03 04:00:24\"\n        },\n        {\n          \"guid\": \"credit-history-guid\",\n          \"type\": \"CREDIT\",\n          \"invoiceGuid\": \"00000000-0000-4000-8000-000000000002\",\n          \"transactionId\": 97695,\n          \"amount\": \"8.62\",\n          \"paymentMode\": \"Xero Upload\",\n          \"paymentReference\": \".\",\n          \"paymentDate\": \"2026-07-01\",\n          \"status\": \"PROCESSED\",\n          \"allocatedAt\": \"2026-07-31 13:19:35\"\n        }\n      ],\n      \"locked\": true,\n      \"split\": false,\n      \"createdAt\": \"2026-08-01 08:00:00\",\n      \"updatedAt\": \"2026-08-05 10:00:00\",\n      \"currency\": \"GBP\"\n    }\n  ],\n  \"metadata\": {\n    \"pagination\": {\n      \"page\": 1,\n      \"pageSize\": 25,\n      \"total\": 1,\n      \"hasNext\": false\n    },\n    \"snapshotAt\": \"2026-08-26T09:00:00Z\"\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","urlObject":{"path":["public/v1","children","00000000-0000-4000-8000-000000000001","financials","invoices"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>Filter by invoice payment status. Possible values: <code>PENDING_PAYMENT</code>, <code>PAID</code>.</p>\n","type":"text/plain"},"key":"status","value":"PAID"},{"disabled":true,"description":{"content":"<p>Filter by invoice document status. Defaults to <code>APPROVED</code>. Use <code>DRAFT</code> for draft invoices or <code>APPROVED,DRAFT</code> for both. Comma-separated values are supported.</p>\n","type":"text/plain"},"key":"invoiceStatus","value":"DRAFT,APPROVED"},{"description":{"content":"<p>One-based page number. Defaults to <code>1</code>. Possible values: Positive integer (<code>1</code> or greater).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Number of records per page. Defaults to <code>50</code>. Possible values: Integer from <code>1</code> to <code>100</code>.</p>\n","type":"text/plain"},"key":"pageSize","value":"25"}],"variable":[]}},"response":[],"_postman_id":"aaf636b7-4866-4b73-b545-e519c0de91c0"},{"name":"Get Child Financial Invoice","event":[{"script":{"exec":["// Use an existing valid financials token, or obtain one immediately before the request.","const existingToken = pm.environment.get(\"accessToken\") || pm.collectionVariables.get(\"accessToken\");","","function hasFinancialsAccess(token) {","    try {","        const payload = JSON.parse(atob(token.split(\".\")[1]));","        return payload.exp > Math.floor(Date.now() / 1000) + 60 &&","            Array.isArray(payload.scope) &&","            payload.scope.includes(\"financials:read\");","    } catch (error) {","        return false;","    }","}","","function applyToken(token) {","    pm.request.headers.upsert({","        key: \"Authorization\",","        value: \"Bearer \" + token","    });","}","","if (hasFinancialsAccess(existingToken)) {","    applyToken(existingToken);","} else {","    pm.sendRequest({","        url: pm.variables.replaceIn(\"https://your-tenant.eylog.co.uk/public/v1/oauth/token\"),","        method: \"POST\",","        header: {","            \"Content-Type\": \"application/json\",","            \"Accept\": \"application/json\"","        },","        body: {","            mode: \"raw\",","            raw: JSON.stringify({","                grantType: \"client_credentials\",","                clientId: pm.environment.get(\"clientId\"),","                clientSecret: pm.environment.get(\"clientSecret\")","            })","        }","    }, function (error, response) {","        if (error) {","            throw error;","        }","        const json = response.json();","        if (!json.data || !json.data.accessToken) {","            throw new Error(\"Unable to obtain a valid financials access token\");","        }","        pm.environment.set(\"accessToken\", json.data.accessToken);","        pm.collectionVariables.set(\"accessToken\", json.data.accessToken);","        applyToken(json.data.accessToken);","    });","}"],"type":"text/javascript"},"listen":"prerequest"},{"script":{"exec":["pm.test(\"Standard success envelope is returned\", function () {","    pm.response.to.have.status(200);","    const body = pm.response.json();","    pm.expect(body.status).to.eql(true);","    pm.expect(body.code).to.eql(200);","    pm.expect(body.data).to.be.an(\"object\");","});","","const invoice = pm.response.json().data;","const moneyFields = [\"grossAmount\", \"fundingReduction\", \"holidayReduction\", \"discount\", \"totalAmount\", \"amountPaid\", \"amountDue\"];","const validPaymentStatuses = [\"PAID\", \"PENDING_PAYMENT\"];","const validHistoryTypes = [\"PAYMENT\", \"CREDIT\"];","const validHistoryStatuses = [\"PAID_OUT\", \"PROCESSED\", \"POSTED\", \"PENDING\", \"FAILED\", \"CANCELLED\", \"REVERSED\"];","const toCents = function (value) { return Math.round(Number(value) * 100); };","","pm.test(\"Invoice fields match the public financial contract\", function () {","    pm.expect(validPaymentStatuses).to.include(invoice.paymentStatus);","    [\"invoiceDate\", \"dueDate\", \"fromDate\", \"toDate\"].forEach(function (field) {","        if (invoice.dates[field] !== null) {","            pm.expect(invoice.dates[field]).to.match(/^\\d{4}-\\d{2}-\\d{2}$/);","        }","    });","    moneyFields.forEach(function (field) {","        pm.expect(invoice.amounts[field]).to.be.a(\"string\").and.match(/^\\d+\\.\\d{2}$/);","    });","    pm.expect(invoice).to.not.have.property(\"allocations\");","    pm.expect(invoice.paymentHistory).to.be.an(\"array\");","    pm.expect(toCents(invoice.amounts.amountPaid) + toCents(invoice.amounts.amountDue)).to.eql(toCents(invoice.amounts.totalAmount));","","    const historyTotal = invoice.paymentHistory.reduce(function (sum, entry) {","        return sum + toCents(entry.amount);","    }, 0);","    pm.expect(historyTotal).to.eql(toCents(invoice.amounts.amountPaid));","","    invoice.paymentHistory.forEach(function (entry) {","        pm.expect(validHistoryTypes).to.include(entry.type);","        [\"guid\", \"invoiceGuid\", \"transactionId\", \"amount\", \"paymentMode\", \"paymentReference\", \"paymentDate\", \"status\", \"allocatedAt\"].forEach(function (field) {","            pm.expect(entry).to.have.property(field);","        });","        pm.expect(entry.paymentDate).to.match(/^\\d{4}-\\d{2}-\\d{2}$/);","        pm.expect(validHistoryStatuses).to.include(entry.status);","    });","});","pm.test(\"Regeneration history matches the public contract\", function () {","    pm.expect(invoice.regenerationHistory).to.be.an(\"array\");","    invoice.regenerationHistory.forEach(function (history) {","        [\"reference\", \"dates\", \"regeneratedAt\", \"amount\"].forEach(function (field) {","            pm.expect(history).to.have.property(field);","            pm.expect(history).not.to.have.property(\"guid\");","            pm.expect(history).not.to.have.property(\"invoiceNumber\");","        });","        [\"invoiceDate\", \"fromDate\", \"toDate\"].forEach(function (field) {","            if (history.dates[field] !== null) {","                pm.expect(history.dates[field]).to.match(/^\\d{4}-\\d{2}-\\d{2}$/);","            }","        });","        pm.expect(history.amount).to.be.a(\"string\").and.match(/^\\d+\\.\\d{2}$/);","        if (history.regeneratedAt !== null) {","            pm.expect(history.regeneratedAt).to.match(/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$/);","        }","    });","});"],"type":"text/javascript"},"listen":"test"}],"id":"3a3d3edf-11f3-4d05-99b5-e2e4008b0c67","request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/children/00000000-0000-4000-8000-000000000001/financials/invoices/00000000-0000-4000-8000-000000000002","description":"<p>Returns one current logical invoice for a child.</p>\n<h2 id=\"authorization\"><strong>Authorization</strong></h2>\n<p>Requires a valid Bearer token with the <code>financials:read</code> scope.</p>\n<h2 id=\"path-parameters\"><strong>Path parameters</strong></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>childGuid</code></td>\n<td>Yes</td>\n<td>Public UUIDv4 GUID of the child.</td>\n</tr>\n<tr>\n<td><code>invoiceGuid</code></td>\n<td>Yes</td>\n<td>Public UUIDv4 GUID of an invoice returned by the invoice collection.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\"><strong>Response</strong></h2>\n<p>Returns invoice dates, payment status, invoice status, complete persisted amount breakdown, payment history, bill-payer snapshots, and persisted line items where available. Invoices without active persisted line-item rows return an empty <code>lineItems</code> array.</p>\n<p>Invoice dates use <code>YYYY-MM-DD</code> (or <code>null</code> where the platform has no date). Money values are decimal strings. <code>paymentStatus</code> is <code>PAID</code> or <code>PENDING_PAYMENT</code>, normalised from the invoice status stored by the platform.</p>\n<p><code>paymentHistory</code> contains both payment and credit entries shown in the platform's Invoice Payment History. Use <code>type</code> to distinguish them. Both types expose the transaction ID, amount, platform payment mode and reference, payment date, platform status, and allocation timestamp. <code>paymentMode</code> preserves the platform display value.</p>\n<p><code>amounts.amountPaid</code> includes both payment and credit entries allocated to the invoice, and <code>amounts.amountDue</code> is calculated from <code>totalAmount - amountPaid</code>.</p>\n<p><code>regenerationHistory</code> contains non-deleted physical invoice predecessors marked as regenerated by the platform. It is an empty array when no regeneration has occurred. The current invoice remains the only invoice row in the list; predecessors are represented only as history metadata. Each history entry includes the reference, dates, amount, and <code>regeneratedAt</code> in BST/local <code>Y-m-d H:i:s</code> format; the current invoice's <code>guid</code> and <code>invoiceNumber</code> are not duplicated in history entries. Internal IDs and platform navigation URLs are not exposed.</p>\n<h2 id=\"line-items\"><strong>Line items</strong></h2>\n<p>The invoice-detail response always includes a <code>lineItems</code> array. The same contract is used for monthly/actual, manual, equally spread, and deposit invoices. The array is empty when the invoice has no active persisted line-item rows; the API does not reconstruct missing historical rows.</p>\n<p>Line-item fields:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>guid</code></td>\n<td>Public line-item GUID, or <code>null</code> when the stored row has no GUID.</td>\n</tr>\n<tr>\n<td><code>type</code></td>\n<td><code>SESSION</code>, <code>PRODUCT</code>, or <code>HOLIDAY_REDUCTION</code>.</td>\n</tr>\n<tr>\n<td><code>description</code></td>\n<td>Line description from the persisted item snapshot.</td>\n</tr>\n<tr>\n<td><code>period</code></td>\n<td>Line period with <code>startDate</code> and <code>endDate</code>.</td>\n</tr>\n<tr>\n<td><code>serviceDays</code></td>\n<td>Dated schedule details for session lines; an empty array for other line types.</td>\n</tr>\n<tr>\n<td><code>quantity</code></td>\n<td><code>attended_hours</code> in <code>HOURS</code> for sessions; <code>item_quantity</code> in <code>ITEMS</code> for products and holiday reductions.</td>\n</tr>\n<tr>\n<td><code>unitPrice</code></td>\n<td>Session hourly rate from <code>item_hourly_rate</code>; product or holiday-reduction unit price from the persisted line item.</td>\n</tr>\n<tr>\n<td><code>discountPercent</code></td>\n<td>Percentage discount for the line, formatted as a two-decimal string.</td>\n</tr>\n<tr>\n<td><code>amounts</code></td>\n<td><code>grossAmount</code>, <code>fundingReduction</code>, <code>discount</code>, and <code>netAmount</code>, formatted as two-decimal strings.</td>\n</tr>\n<tr>\n<td><code>nominalCode</code></td>\n<td>Nested <code>code</code>, <code>name</code>, and <code>source</code> values. Unassigned lines return <code>code: null</code>, <code>name: null</code>, and <code>source: \"UNASSIGNED\"</code>.</td>\n</tr>\n<tr>\n<td><code>metadata</code></td>\n<td>Type-specific metadata. Session lines currently expose <code>fundedHours</code> and <code>chargeableHours</code>; product lines currently return an empty object.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"monthly-or-actual-invoice-line-items\"><strong>Monthly or actual invoice line items</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"lineItems\": [\n    {\n      \"guid\": \"00000000-0000-4000-8000-000000000010\",\n      \"type\": \"SESSION\",\n      \"description\": \"Full Day Session\",\n      \"period\": {\n        \"startDate\": \"2026-08-03\",\n        \"endDate\": \"2026-08-09\"\n      },\n      \"serviceDays\": [\n        {\n          \"date\": \"2026-08-05\",\n          \"day\": \"WEDNESDAY\",\n          \"description\": \"08:00-18:00\"\n        }\n      ],\n      \"quantity\": {\n        \"value\": \"10.00\",\n        \"unit\": \"HOURS\"\n      },\n      \"unitPrice\": \"8.19\",\n      \"discountPercent\": \"50.00\",\n      \"amounts\": {\n        \"grossAmount\": \"81.90\",\n        \"fundingReduction\": \"81.90\",\n        \"discount\": \"0.00\",\n        \"netAmount\": \"0.00\"\n      },\n      \"nominalCode\": {\n        \"code\": \"100102\",\n        \"name\": \"Fees for nursery services\",\n        \"source\": \"SESSION\"\n      },\n      \"metadata\": {\n        \"fundedHours\": \"10.00\",\n        \"chargeableHours\": \"0.00\"\n      }\n    },\n    {\n      \"guid\": \"00000000-0000-4000-8000-000000000011\",\n      \"type\": \"PRODUCT\",\n      \"description\": \"Staff Consumables FD\",\n      \"period\": {\n        \"startDate\": \"2026-08-03\",\n        \"endDate\": \"2026-08-09\"\n      },\n      \"serviceDays\": [],\n      \"quantity\": {\n        \"value\": \"1.00\",\n        \"unit\": \"ITEMS\"\n      },\n      \"unitPrice\": \"5.00\",\n      \"discountPercent\": \"0.00\",\n      \"amounts\": {\n        \"grossAmount\": \"5.00\",\n        \"fundingReduction\": \"0.00\",\n        \"discount\": \"0.00\",\n        \"netAmount\": \"5.00\"\n      },\n      \"nominalCode\": {\n        \"code\": null,\n        \"name\": null,\n        \"source\": \"UNASSIGNED\"\n      },\n      \"metadata\": {}\n    }\n  ]\n}\n\n</code></pre>\n<h3 id=\"manual-invoice-line-items\"><strong>Manual invoice line items</strong></h3>\n<p>Manual invoices use the same line-item shape. Their product lines normally use <code>ITEMS</code> quantity, product unit price, and an empty <code>metadata</code> object.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"lineItems\": [\n    {\n      \"guid\": \"00000000-0000-4000-8000-000000000012\",\n      \"type\": \"PRODUCT\",\n      \"description\": \"Registration Fee\",\n      \"period\": {\n        \"startDate\": \"2026-09-01\",\n        \"endDate\": \"2026-09-01\"\n      },\n      \"serviceDays\": [],\n      \"quantity\": {\n        \"value\": \"1.00\",\n        \"unit\": \"ITEMS\"\n      },\n      \"unitPrice\": \"50.00\",\n      \"discountPercent\": \"0.00\",\n      \"amounts\": {\n        \"grossAmount\": \"50.00\",\n        \"fundingReduction\": \"0.00\",\n        \"discount\": \"0.00\",\n        \"netAmount\": \"50.00\"\n      },\n      \"nominalCode\": {\n        \"code\": null,\n        \"name\": null,\n        \"source\": \"UNASSIGNED\"\n      },\n      \"metadata\": {}\n    }\n  ]\n}\n\n</code></pre>\n<h3 id=\"deposit-invoice-line-items\"><strong>Deposit invoice line items</strong></h3>\n<p>Deposit invoices use the same line-item shape as other invoice types. If persisted deposit line-item rows exist, they are returned in <code>data.lineItems</code>; otherwise the array is empty.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"lineItems\": [\n    {\n      \"guid\": \"00000000-0000-4000-8000-000000000013\",\n      \"type\": \"PRODUCT\",\n      \"description\": \"Deposit\",\n      \"period\": {\n        \"startDate\": \"2026-09-01\",\n        \"endDate\": \"2026-09-01\"\n      },\n      \"serviceDays\": [],\n      \"quantity\": {\n        \"value\": \"1.00\",\n        \"unit\": \"ITEMS\"\n      },\n      \"unitPrice\": \"200.00\",\n      \"discountPercent\": \"0.00\",\n      \"amounts\": {\n        \"grossAmount\": \"200.00\",\n        \"fundingReduction\": \"0.00\",\n        \"discount\": \"0.00\",\n        \"netAmount\": \"200.00\"\n      },\n      \"nominalCode\": {\n        \"code\": null,\n        \"name\": null,\n        \"source\": \"UNASSIGNED\"\n      },\n      \"metadata\": {}\n    }\n  ]\n}\n\n</code></pre>\n<h2 id=\"errors\"><strong>Errors</strong></h2>\n<ul>\n<li><p><code>401 Unauthorized</code>: missing, invalid, or expired access token.</p>\n</li>\n<li><p><code>403 Forbidden</code>: the token lacks <code>financials:read</code> or the requested child is outside the client's permitted scope.</p>\n</li>\n<li><p><code>404 Not Found</code>: the requested child or invoice does not exist or is not available to the authenticated client.</p>\n</li>\n<li><p><code>429 Too Many Requests</code>: financials rate limit exceeded.</p>\n</li>\n<li><p><code>500 Internal Server Error</code>: unexpected server failure.</p>\n</li>\n</ul>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": {\n    \"guid\": \"00000000-0000-4000-8000-000000000002\",\n    \"invoiceNumber\": \"INV-2026-0001\",\n    \"invoiceType\": \"MONTHLY\",\n    \"dates\": {\n      \"invoiceDate\": \"2026-08-01\",\n      \"dueDate\": \"2026-08-15\",\n      \"fromDate\": \"2026-08-01\",\n      \"toDate\": \"2026-08-31\"\n    },\n    \"description\": \"Monthly Invoice for 01-08-2026 to 31-08-2026\",\n    \"reference\": \"CHILD-001\",\n    \"paymentStatus\": \"PAID\",\n    \"invoiceStatus\": \"APPROVED\",\n    \"amounts\": {\n      \"grossAmount\": \"550.00\",\n      \"fundingReduction\": \"50.00\",\n      \"holidayReduction\": \"0.00\",\n      \"discount\": \"0.00\",\n      \"totalAmount\": \"500.00\",\n      \"amountPaid\": \"500.00\",\n      \"amountDue\": \"0.00\"\n    },\n    \"regenerationHistory\": [\n      {\n        \"reference\": \"REF-10024\",\n        \"dates\": {\n          \"invoiceDate\": \"2026-07-01\",\n          \"fromDate\": \"2026-06-01\",\n          \"toDate\": \"2026-06-30\"\n        },\n        \"regeneratedAt\": \"2026-07-02 10:00:00\",\n        \"amount\": \"800.00\"\n      }\n    ],\n    \"paymentHistory\": [\n      {\n        \"guid\": \"payment-history-guid\",\n        \"type\": \"PAYMENT\",\n        \"invoiceGuid\": \"00000000-0000-4000-8000-000000000002\",\n        \"transactionId\": 85926,\n        \"amount\": \"491.38\",\n        \"paymentMode\": \"eypay (Tax-Free Childcare)\",\n        \"paymentReference\": \"PAY-2026-0001\",\n        \"paymentDate\": \"2026-08-03\",\n        \"status\": \"PAID_OUT\",\n        \"allocatedAt\": \"2026-08-03 04:00:24\"\n      },\n      {\n        \"guid\": \"credit-history-guid\",\n        \"type\": \"CREDIT\",\n        \"invoiceGuid\": \"00000000-0000-4000-8000-000000000002\",\n        \"transactionId\": 97695,\n        \"amount\": \"8.62\",\n        \"paymentMode\": \"Xero Upload\",\n        \"paymentReference\": \".\",\n        \"paymentDate\": \"2026-07-01\",\n        \"status\": \"PROCESSED\",\n        \"allocatedAt\": \"2026-07-31 13:19:35\"\n      }\n    ],\n    \"locked\": true,\n    \"split\": false,\n    \"createdAt\": \"2026-08-01 08:00:00\",\n    \"updatedAt\": \"2026-08-05 10:00:00\",\n    \"currency\": \"GBP\",\n    \"billPayers\": [],\n    \"lineItems\": []\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n\n</code></pre>\n","urlObject":{"path":["public/v1","children","00000000-0000-4000-8000-000000000001","financials","invoices","00000000-0000-4000-8000-000000000002"],"host":["https://your-tenant.eylog.co.uk"],"query":[],"variable":[]}},"response":[],"_postman_id":"3a3d3edf-11f3-4d05-99b5-e2e4008b0c67"},{"name":"List Child Credits","event":[{"listen":"prerequest","script":{"exec":["// Use an existing valid financials token, or obtain one immediately before the request.","const existingToken = pm.environment.get(\"accessToken\") || pm.collectionVariables.get(\"accessToken\");","","function hasFinancialsAccess(token) {","    try {","        const payload = JSON.parse(atob(token.split(\".\")[1]));","        return payload.exp > Math.floor(Date.now() / 1000) + 60 &&","            Array.isArray(payload.scope) &&","            payload.scope.includes(\"financials:read\");","    } catch (error) {","        return false;","    }","}","","function applyToken(token) {","    pm.request.headers.upsert({","        key: \"Authorization\",","        value: \"Bearer \" + token","    });","}","","if (hasFinancialsAccess(existingToken)) {","    applyToken(existingToken);","} else {","    pm.sendRequest({","        url: pm.variables.replaceIn(\"https://your-tenant.eylog.co.uk/public/v1/oauth/token\"),","        method: \"POST\",","        header: {","            \"Content-Type\": \"application/json\",","            \"Accept\": \"application/json\"","        },","        body: {","            mode: \"raw\",","            raw: JSON.stringify({","                grantType: \"client_credentials\",","                clientId: pm.environment.get(\"clientId\"),","                clientSecret: pm.environment.get(\"clientSecret\")","            })","        }","    }, function (error, response) {","        if (error) {","            throw error;","        }","        const json = response.json();","        if (!json.data || !json.data.accessToken) {","            throw new Error(\"Unable to obtain a valid financials access token\");","        }","        pm.environment.set(\"accessToken\", json.data.accessToken);","        pm.collectionVariables.set(\"accessToken\", json.data.accessToken);","        applyToken(json.data.accessToken);","    });","}"],"type":"text/javascript"}},{"listen":"test","script":{"exec":["const body = pm.response.json();","const rows = Array.isArray(body.data) ? body.data : [];","const allowedCreditTypes = [\"PAYMENT_ON_ACCOUNT\", \"CREDIT_NOTE\", \"DEPOSIT\", \"OPENING_BALANCE\"];","const allowedStatuses = [\"ALLOCATED\", \"NON_ALLOCATED\"];","const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;","const datePattern = /^\\d{4}-\\d{2}-\\d{2}$/","const dateTimePattern = /^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$/","const moneyPattern = /^\\d+\\.\\d{2}$/","","function cents(value) {","    const parts = String(value).split(\".\");","    return (parseInt(parts[0], 10) * 100) + parseInt((parts[1] || \"\").padEnd(2, \"0\"), 10);","}","","pm.test(\"Credits response has a valid envelope\", function () {","    pm.response.to.have.status(200);","    pm.expect(body.status).to.eql(true);","    pm.expect(body.code).to.eql(200);","    pm.expect(body.data).to.be.an(\"array\");","    pm.expect(body.metadata.pagination).to.be.an(\"object\");","    pm.expect(body.metadata.snapshotAt).to.match(/^\\d{4}-\\d{2}-\\d{2}T/);","});","","pm.test(\"Credits response has valid pagination\", function () {","    const pagination = body.metadata.pagination;","    pm.expect(pagination.page).to.be.a(\"number\").and.to.be.above(0);","    pm.expect(pagination.pageSize).to.be.a(\"number\").and.to.be.within(1, 100);","    pm.expect(pagination.total).to.be.a(\"number\").and.to.be.at.least(rows.length);","    pm.expect(pagination.hasNext).to.be.a(\"boolean\");","});","","rows.forEach(function (row, index) {","    pm.test(\"Credit row \" + index + \" matches the current contract\", function () {","        pm.expect(row.guid, \"guid\").to.match(uuidPattern);","        pm.expect(row.currency, \"currency\").to.be.a(\"string\").and.to.have.length(3);","        pm.expect(allowedCreditTypes, \"creditType\").to.include(row.creditType);","        pm.expect(row).not.to.have.property(\"type\");","        pm.expect(row).not.to.have.property(\"subType\");","        pm.expect(row.creditNumber === null || typeof row.creditNumber === \"string\").to.eql(true);","        pm.expect(row.dates).to.be.an(\"object\");","        pm.expect(row.dates.creditDate === null || datePattern.test(row.dates.creditDate)).to.eql(true);","        pm.expect(row.reference === null || typeof row.reference === \"string\").to.eql(true);","        pm.expect(allowedStatuses, \"status\").to.include(row.status);","        pm.expect(row.amounts).to.be.an(\"object\");","        pm.expect(row.amounts.totalAmount, \"totalAmount\").to.match(moneyPattern);","        pm.expect(row.amounts.allocatedAmount, \"allocatedAmount\").to.match(moneyPattern);","        pm.expect(row.amounts.unallocatedAmount, \"unallocatedAmount\").to.match(moneyPattern);","        pm.expect(cents(row.amounts.allocatedAmount) + cents(row.amounts.unallocatedAmount)).to.eql(cents(row.amounts.totalAmount));","        pm.expect(row.allocations, \"allocations\").to.be.an(\"array\");","        pm.expect(row.createdAt === null || dateTimePattern.test(row.createdAt)).to.eql(true);","        pm.expect(row.updatedAt === null || dateTimePattern.test(row.updatedAt)).to.eql(true);","","        row.allocations.forEach(function (allocation) {","            pm.expect(allocation.guid, \"allocation guid\").to.match(uuidPattern);","            pm.expect(allocation.invoiceGuid, \"invoiceGuid\").to.match(uuidPattern);","            pm.expect(allocation.amount, \"allocation amount\").to.match(moneyPattern);","            pm.expect(allocation.allocatedAt, \"allocatedAt\").to.match(dateTimePattern);","            pm.expect(allocation.links).to.be.an(\"object\");","            pm.expect(allocation.links.resource).to.eql(","                \"/public/v1/children/\" + pm.variables.replaceIn(\"00000000-0000-4000-8000-000000000001\") +","                \"/financials/invoices/\" + allocation.invoiceGuid","            );","        });","    });","});"],"type":"text/javascript"}}],"id":"87d9e3ac-a3ff-4dac-af02-a022ce2e9718","request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/children/00000000-0000-4000-8000-000000000001/financials/credits?page=1&pageSize=25","description":"<p>Returns credits held or applied on the child account. Requires the <code>financials:read</code> scope.</p>\n<p>Query parameters:</p>\n<ul>\n<li><code>type</code>: optional credit type filter: <code>PAYMENT_ON_ACCOUNT</code>, <code>CREDIT_NOTE</code>, <code>DEPOSIT</code>, or <code>OPENING_BALANCE</code>.</li>\n<li><code>status</code>: optional allocation status filter: <code>ALLOCATED</code> or <code>NON_ALLOCATED</code>.</li>\n<li><code>page</code>: one-based page number.</li>\n<li><code>pageSize</code>: number of records per page, from 1 to 100.</li>\n</ul>\n<p>The response uses the invoice-list shape for shared fields. Credits expose <code>creditNumber</code>, <code>creditType</code>, grouped <code>dates</code> and <code>amounts</code>, <code>allocations</code>, and audit timestamps. <code>creditNumber</code> is the computed invoice URN where available. Allocation entries include a relative <code>links.resource</code> URL for the canonical invoice endpoint. The platform value <code>NOT_ALLOCATED</code> is normalized to the public API value <code>NON_ALLOCATED</code>.</p>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"00000000-0000-4000-8000-000000000003\",\n      \"currency\": \"GBP\",\n      \"creditNumber\": \"DEP-10024\",\n      \"creditType\": \"DEPOSIT\",\n      \"dates\": {\n        \"creditDate\": \"2026-09-01\"\n      },\n      \"reference\": \"Deposit paid for the place in the nursery\",\n      \"status\": \"ALLOCATED\",\n      \"amounts\": {\n        \"totalAmount\": \"200.00\",\n        \"allocatedAmount\": \"110.48\",\n        \"unallocatedAmount\": \"89.52\"\n      },\n      \"allocations\": [\n        {\n          \"guid\": \"allocation-guid\",\n          \"amount\": \"110.48\",\n          \"allocatedAt\": \"2026-09-09 09:27:25\",\n          \"invoiceGuid\": \"00000000-0000-4000-8000-000000000002\",\n          \"links\": {\n            \"resource\": \"/public/v1/children/{childGuid}/financials/invoices/{invoiceGuid}\"\n          }\n        }\n      ],\n      \"createdAt\": \"2026-09-01 12:00:00\",\n      \"updatedAt\": \"2026-09-09 09:27:25\"\n    },\n    {\n      \"guid\": \"00000000-0000-4000-8000-000000000004\",\n      \"currency\": \"GBP\",\n      \"creditNumber\": \"POA-10025\",\n      \"creditType\": \"PAYMENT_ON_ACCOUNT\",\n      \"dates\": {\n        \"creditDate\": \"2026-01-05\"\n      },\n      \"reference\": \".\",\n      \"status\": \"NON_ALLOCATED\",\n      \"amounts\": {\n        \"totalAmount\": \"1.00\",\n        \"allocatedAmount\": \"0.00\",\n        \"unallocatedAmount\": \"1.00\"\n      },\n      \"allocations\": [],\n      \"createdAt\": \"2026-01-06 14:02:01\",\n      \"updatedAt\": \"2026-01-06 14:02:01\"\n    }\n  ],\n  \"metadata\": {\n    \"pagination\": {\n      \"page\": 1,\n      \"pageSize\": 25,\n      \"total\": 2,\n      \"hasNext\": false\n    },\n    \"snapshotAt\": \"2026-09-09T09:00:00Z\"\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","urlObject":{"path":["public/v1","children","00000000-0000-4000-8000-000000000001","financials","credits"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>Filter by credit type. Possible values: <code>PAYMENT_ON_ACCOUNT</code>, <code>CREDIT_NOTE</code>, <code>DEPOSIT</code>, <code>OPENING_BALANCE</code>.</p>\n","type":"text/plain"},"key":"type","value":"PAYMENT_ON_ACCOUNT"},{"disabled":true,"description":{"content":"<p>Filter by allocation status. Possible values: <code>ALLOCATED</code>, <code>NON_ALLOCATED</code>.</p>\n","type":"text/plain"},"key":"status","value":"NON_ALLOCATED"},{"disabled":true,"description":{"content":"<p>One-based page number. Defaults to <code>1</code>. Possible values: Positive integer (<code>1</code> or greater).</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Number of records per page. Defaults to <code>50</code>. Possible values: Integer from <code>1</code> to <code>100</code>.</p>\n","type":"text/plain"},"key":"pageSize","value":"25"}],"variable":[]}},"response":[],"_postman_id":"87d9e3ac-a3ff-4dac-af02-a022ce2e9718"},{"name":"List Child Financial Transactions","event":[{"script":{"exec":["// Use an existing valid financials token, or obtain one immediately before the request.","const existingToken = pm.environment.get(\"accessToken\") || pm.collectionVariables.get(\"accessToken\");","","function hasFinancialsAccess(token) {","    try {","        const payload = JSON.parse(atob(token.split(\".\")[1]));","        return payload.exp > Math.floor(Date.now() / 1000) + 60 &&","            Array.isArray(payload.scope) &&","            payload.scope.includes(\"financials:read\");","    } catch (error) {","        return false;","    }","}","","function applyToken(token) {","    pm.request.headers.upsert({","        key: \"Authorization\",","        value: \"Bearer \" + token","    });","}","","if (hasFinancialsAccess(existingToken)) {","    applyToken(existingToken);","} else {","    pm.sendRequest({","        url: pm.variables.replaceIn(\"https://your-tenant.eylog.co.uk/public/v1/oauth/token\"),","        method: \"POST\",","        header: {","            \"Content-Type\": \"application/json\",","            \"Accept\": \"application/json\"","        },","        body: {","            mode: \"raw\",","            raw: JSON.stringify({","                grantType: \"client_credentials\",","                clientId: pm.environment.get(\"clientId\"),","                clientSecret: pm.environment.get(\"clientSecret\")","            })","        }","    }, function (error, response) {","        if (error) {","            throw error;","        }","        const json = response.json();","        if (!json.data || !json.data.accessToken) {","            throw new Error(\"Unable to obtain a valid financials access token\");","        }","        pm.environment.set(\"accessToken\", json.data.accessToken);","        pm.collectionVariables.set(\"accessToken\", json.data.accessToken);","        applyToken(json.data.accessToken);","    });","}"],"type":"text/javascript"},"listen":"prerequest"},{"script":{"exec":["const body = pm.response.json();","","pm.test(\"returns a successful financial transaction envelope\", function () {","    pm.response.to.have.status(200);","    pm.expect(body.status).to.eql(true);","    pm.expect(body.code).to.eql(200);","    pm.expect(body.data).to.be.an(\"array\");","    pm.expect(body.metadata.pagination).to.be.an(\"object\");","});","","pm.test(\"returns valid pagination metadata\", function () {","    const pagination = body.metadata.pagination;","    pm.expect(pagination.page).to.be.a(\"number\");","    pm.expect(pagination.pageSize).to.be.a(\"number\");","    pm.expect(pagination.total).to.be.a(\"number\");","    pm.expect(pagination.hasNext).to.be.a(\"boolean\");","    pm.expect(body.data.length).to.be.at.most(pagination.pageSize);","});","","pm.test(\"returns normalized and platform-ordered transactions\", function () {","    const moneyPattern = /^-?[0-9]+[.][0-9]{2}$/","    const datePattern = /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/","    const guidPattern = /^[0-9a-f-]{36}$/i;","    const allowedTypes = [\"Invoice\", \"Payment\", \"Credit Note\", \"Deposit\", \"Refund/Transfer\"];","    const allowedDirections = [\"DEBIT\", \"CREDIT\"];","    const rows = body.data;","    const childGuid = pm.variables.replaceIn(\"00000000-0000-4000-8000-000000000001\");","","    rows.forEach(function (row) {","        pm.expect(row.guid).to.match(guidPattern);","        pm.expect(row.type).to.be.oneOf(allowedTypes);","        pm.expect(row).not.to.have.property(\"subType\");","        pm.expect(row.transactionDate).to.match(datePattern);","        pm.expect(row.direction).to.be.oneOf(allowedDirections);","        pm.expect(row.amount).to.match(moneyPattern);","        pm.expect(row.balanceAfter).to.match(moneyPattern);","        pm.expect(row.source).to.be.an(\"object\");","        pm.expect(row.source.guid).to.eql(row.guid);","","        if (row.type === \"Invoice\") {","            pm.expect(row.source.links).to.be.an(\"object\");","            pm.expect(row.source.links.resource).to.eql(","                \"/public/v1/children/\" + childGuid + \"/financials/invoices/\" + row.source.guid","            );","        } else {","            pm.expect(row.source).not.to.have.property(\"links\");","        }","","        if (row.type === \"Payment\" || row.type === \"Deposit\" || row.type === \"Refund/Transfer\") {","            pm.expect(row.details).to.be.an(\"object\");","            pm.expect(row.details.paymentMode).to.be.a(\"string\");","            pm.expect(row.details).not.to.have.property(\"paymentMethod\");","            pm.expect(row.details).not.to.have.property(\"paymentReference\");","            pm.expect(row.details.sourceAmount).to.match(moneyPattern);","        }","    });","","    for (let index = 1; index < rows.length; index += 1) {","        const previous = rows[index - 1];","        const current = rows[index];","        pm.expect(previous.transactionDate >= current.transactionDate,","            \"transactions are ordered by transactionDate DESC; same-day rows use platform creation-time, type, and source-ID ordering\").to.eql(true);","    }","});"],"type":"text/javascript"},"listen":"test"}],"id":"5855106f-c9b4-4fd6-8da9-3c9ebd031aeb","request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"https://your-tenant.eylog.co.uk/public/v1/children/00000000-0000-4000-8000-000000000001/financials/transactions?page=1&pageSize=25","description":"<p>Returns the combined child financial ledger. Results follow the platform transaction statement order: transactionDate descending, creation time descending, then deposit credit rows before payment rows when timestamps are equal, source ID ascending within the same transaction type, and GUID ascending as the final tie-breaker. balanceAfter is the signed running balance after each row. Deposit credit rows are included for traceability but are balance-neutral; ordinary credit allocations are included in the source payment amount and are not emitted as separate credit rows. Invoice rows expose source.links.resource as the relative canonical invoice detail URL. Links are currently provided only where an individual resource endpoint exists; source.guid remains the authoritative identifier. Payment and Deposit rows expose the platform display value as details.paymentMode, retain the original source amount as details.sourceAmount, and expose the payment reference once as the top-level reference. Fetch every page using metadata.snapshotAt for reconciliation.</p>\n<h2 id=\"response-examples\"><strong>Response examples</strong></h2>\n<h3 id=\"success-200\"><strong>Success (200)</strong></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"status\": true,\n  \"code\": 200,\n  \"message\": \"OK\",\n  \"data\": [\n    {\n      \"guid\": \"00000000-0000-4000-8000-000000000005\",\n      \"currency\": \"GBP\",\n      \"type\": \"Invoice\",\n      \"status\": \"POSTED\",\n      \"transactionDate\": \"2026-09-01\",\n      \"reference\": \"INV-2026-0002\",\n      \"direction\": \"DEBIT\",\n      \"amount\": \"110.48\",\n      \"source\": {\n        \"guid\": \"00000000-0000-4000-8000-000000000005\",\n        \"type\": \"INVOICE\",\n        \"links\": {\n          \"resource\": \"/public/v1/children/{childGuid}/financials/invoices/00000000-0000-4000-8000-000000000005\"\n        }\n      },\n      \"allocations\": [],\n      \"balanceAfter\": \"110.48\",\n      \"details\": {}\n    },\n    {\n      \"guid\": \"00000000-0000-4000-8000-000000000007\",\n      \"currency\": \"GBP\",\n      \"type\": \"Payment\",\n      \"status\": \"POSTED\",\n      \"transactionDate\": \"2026-09-09\",\n      \"reference\": \"Used as fees\",\n      \"direction\": \"CREDIT\",\n      \"amount\": \"110.48\",\n      \"source\": {\n        \"guid\": \"00000000-0000-4000-8000-000000000007\",\n        \"type\": \"PAYMENT\"\n      },\n      \"allocations\": [\n        {\n          \"guid\": \"00000000-0000-4000-8000-000000000011\",\n          \"invoiceGuid\": \"00000000-0000-4000-8000-000000000005\",\n          \"amount\": \"110.48\",\n          \"allocatedAt\": \"2026-09-09 09:27:25\"\n        }\n      ],\n      \"balanceAfter\": \"0.00\",\n      \"details\": {\n        \"paymentMode\": \"Bank/Standing Order\",\n        \"sourceAmount\": \"110.48\"\n      }\n    },\n    {\n      \"guid\": \"00000000-0000-4000-8000-000000000009\",\n      \"currency\": \"GBP\",\n      \"type\": \"Deposit\",\n      \"status\": \"POSTED\",\n      \"transactionDate\": \"2026-09-01\",\n      \"reference\": \"Deposit paid for the place in the nursery\",\n      \"direction\": \"CREDIT\",\n      \"amount\": \"200.00\",\n      \"source\": {\n        \"guid\": \"00000000-0000-4000-8000-000000000009\",\n        \"type\": \"CREDIT\"\n      },\n      \"allocations\": [],\n      \"balanceAfter\": \"0.00\",\n      \"details\": {\n        \"paymentMode\": \"Bank/Standing Order\",\n        \"sourceAmount\": \"200.00\"\n      }\n    }\n  ],\n  \"metadata\": {\n    \"pagination\": {\n      \"page\": 1,\n      \"pageSize\": 25,\n      \"total\": 3,\n      \"hasNext\": false\n    },\n    \"snapshotAt\": \"2026-09-09T09:00:00Z\"\n  },\n  \"correlationId\": null,\n  \"apiVersion\": 1\n}\n</code></pre>\n","urlObject":{"path":["public/v1","children","00000000-0000-4000-8000-000000000001","financials","transactions"],"host":["https://your-tenant.eylog.co.uk"],"query":[{"disabled":true,"description":{"content":"<p>Filter by business transaction type. Possible values: <code>Invoice</code>, <code>Payment</code>, <code>Credit Note</code>, <code>Deposit</code>, or <code>Refund/Transfer</code>.</p>\n","type":"text/plain"},"key":"type","value":"Invoice"},{"disabled":true,"description":{"content":"<p>Filter by transaction status. Possible values: <code>POSTED</code>.</p>\n","type":"text/plain"},"key":"status","value":"POSTED"},{"description":{"content":"<p>One-based page number. Defaults to <code>1</code>.</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Number of records per page. Defaults to <code>50</code>; maximum <code>100</code>.</p>\n","type":"text/plain"},"key":"pageSize","value":"25"}],"variable":[]}},"response":[],"_postman_id":"5855106f-c9b4-4fd6-8da9-3c9ebd031aeb"}],"id":"f8422d40-07cb-4d78-a902-b2ad886cf435","description":"<p>Read-only child financial data. Requires the <code>financials:read</code> scope. Financial collection responses use <code>metadata.pagination</code> and <code>metadata.snapshotAt</code>; amounts are decimal strings and records are identified by opaque GUIDs.</p>\n","_postman_id":"f8422d40-07cb-4d78-a902-b2ad886cf435","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}}},{"name":"New Request","id":"db79a433-f9ce-4238-aeb9-05e605aef8ac","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"61a47545-1c31-4934-a301-acf2669e0faf","id":"61a47545-1c31-4934-a301-acf2669e0faf","name":"eyworks - Public API","type":"collection"}},"urlObject":{"query":[],"variable":[]},"url":""},"response":[],"_postman_id":"db79a433-f9ce-4238-aeb9-05e605aef8ac"}],"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]}},"event":[{"listen":"prerequest","script":{"type":"text/javascript","packages":{},"requests":{},"exec":[""]}},{"listen":"test","script":{"type":"text/javascript","packages":{},"requests":{},"exec":[""]}}],"variable":[{"key":"baseUrl","value":"https://your-tenant.eylog.co.uk","description":"Replace with your tenant address without a trailing slash."},{"key":"apiPrefix","value":"public/v1","description":"Fixed version prefix for the eyworks Public API."},{"key":"clientId","value":""},{"key":"clientSecret","value":""},{"key":"accessToken","value":""},{"key":"refreshToken","value":""},{"key":"companyId","value":"1"},{"key":"nurseryId","value":"1"},{"key":"employeeId","value":"1"},{"key":"childId","value":"1"},{"key":"childGuid","value":"00000000-0000-4000-8000-000000000001"},{"key":"invoiceGuid","value":"00000000-0000-4000-8000-000000000002"},{"key":"enquiryId","value":"1"},{"key":"lookupDomain","value":"enquiryReason"},{"key":"page","value":"1"},{"key":"pageSize","value":"25"},{"key":"status","value":"active"},{"key":"financialStatus","value":"POSTED"},{"key":"creditType","value":"PAYMENT_ON_ACCOUNT"},{"key":"transactionType","value":"INVOICE"},{"key":"transactionSubType","value":"MONTHLY"},{"key":"enquiryGuid","value":"00000000-0000-4000-8000-000000000003","description":"Public UUIDv4 GUID of an enquiry."}]}