{"info":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","description":"<html><head></head><body><p>The TC Go Public API lets you connect your systems to TC Go. Use it to find housing providers, properties, and published templates; create and manage jobs; and retrieve document details and saved data.</p>\n<h2 id=\"getting-started\">Getting started</h2>\n<p>To use the API, you need a service-provider API token and your TC Go API address.</p>\n<ol>\n<li><p>Ask an administrator to create an API token in the TC Go admin panel under <strong>Service Provider → API Tokens</strong>. Copy the full token when it is created and note its expiry date.</p>\n</li>\n<li><p>Include the token in the Authorization header of every request, using the Bearer format shown below.</p>\n</li>\n<li><p>Call <strong>Check API version</strong> to confirm that your API address and token are working.</p>\n</li>\n<li><p>Use <strong>List housing providers</strong>, <strong>Search properties</strong>, and <strong>List published templates</strong> to find the IDs needed to create a job.</p>\n</li>\n<li><p>Call <strong>Create job</strong>, then keep the returned job ID to retrieve or update it later.</p>\n</li>\n</ol>\n<h2 id=\"base-url\">Base URL</h2>\n<p>All endpoints use this base URL:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-text\">{{base_url}}/api/public/v1\n\n</code></pre>\n<p>Replace base_url with the TC Go API address provided for your account, without a trailing slash. The example domain in the request URLs is a placeholder.</p>\n<p>Your token identifies your service provider, so you do not need to send a service_provider_id. Use IDs belonging to your account and the API environment you are calling.</p>\n<h2 id=\"authentication\">Authentication</h2>\n<p>Every endpoint requires a service-provider API token, including Check API version. Include these headers:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-http\">Authorization: Bearer YOUR_API_TOKEN\nAccept: application/json\n\n</code></pre>\n<p>For requests with a JSON body, also include:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-http\">Content-Type: application/json\n\n</code></pre>\n<p>Keep your API token private. Do not include it in browser code, public repositories, or shared documentation. An ordinary user login token cannot be used for these endpoints. If your API token expires or is revoked, ask an administrator for a replacement.</p>\n<h2 id=\"creating-your-first-job\">Creating your first job</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Step</th>\n<th>Endpoint</th>\n<th>What to use next</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1</td>\n<td>List housing providers</td>\n<td>Use a returned id as housing_provider_id.</td>\n</tr>\n<tr>\n<td>2</td>\n<td>Search properties</td>\n<td>Search within that housing provider and use a returned id as property_id.</td>\n</tr>\n<tr>\n<td>3</td>\n<td>List published templates</td>\n<td>Select a template for the same housing provider and use its id as template_id. Check requires_approval.</td>\n</tr>\n<tr>\n<td>4</td>\n<td>Create job</td>\n<td>Provide those IDs and a deadline on or after today. Keep the returned data.id as the job ID.</td>\n</tr>\n<tr>\n<td>5</td>\n<td>Get job / List jobs</td>\n<td>Retrieve the job and check its current status.</td>\n</tr>\n</tbody>\n</table>\n</div><p>When creating a job, assigned_to and approved_by must both be included. Send an eligible user's email address or JSON null. If the template requires approval and you select an assignee, you must also select a different eligible approver. See <strong>Create job</strong> for the complete rules and optional fields.</p>\n<p>Use <strong>Update job</strong> to change permitted details. <strong>Delete job</strong> is available only for jobs with status open or unassigned.</p>\n<p>Use <strong>Get document</strong> with an existing TC Go document ID to retrieve document details and saved data. A document ID is different from its job ID or linked True Compliance document ID. The public job responses do not include document IDs. The API documented here does not provide endpoints to create documents, list job documents, or download PDFs.</p>\n<h2 id=\"responses\">Responses</h2>\n<p>Single-resource responses contain a data object:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"data\": {\n    \"id\": 401\n  }\n}\n\n</code></pre>\n<p>This is an abbreviated example showing the response wrapper. Each endpoint documents its full response fields. Lists contain a data array. <strong>Check API version</strong> and <strong>Delete job</strong> return their own JSON objects without a data wrapper.</p>\n<p>All example IDs, names, email addresses, dates, and other values are illustrative. Use your own account's values in requests.</p>\n<h3 id=\"pagination\">Pagination</h3>\n<p><strong>List jobs</strong> and <strong>Search properties</strong> return links and meta alongside data. Start with page 1 and continue until meta.current_page reaches meta.last_page, keeping the same filters on each request.</p>\n<ul>\n<li><p>For List jobs, increase the page query parameter. Pagination links may not retain your filters.</p>\n</li>\n<li><p>For Search properties, repeat the POST request with the next page number in the JSON body.</p>\n</li>\n<li><p>Housing providers and templates are returned without pagination.</p>\n</li>\n</ul>\n<h3 id=\"dates-and-optional-values\">Dates and optional values</h3>\n<p>Use YYYY-MM-DD for dates in requests and HH:mm:ss for appointment times. Returned date/time values are serialized strings. Fields that accept null are identified in each endpoint's field table. Assignment requests use email addresses; the corresponding response fields contain user objects or null.</p>\n<h2 id=\"errors\">Errors</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>200</td>\n<td>Request completed</td>\n<td>Read the response body.</td>\n</tr>\n<tr>\n<td>201</td>\n<td>Job created</td>\n<td>Store the returned data.id.</td>\n</tr>\n<tr>\n<td>401</td>\n<td>Authentication failed</td>\n<td>Check your API token and whether it has expired or been revoked.</td>\n</tr>\n<tr>\n<td>404</td>\n<td>Resource unavailable</td>\n<td>Check the ID, account, and API environment. Resources outside your service provider are inaccessible.</td>\n</tr>\n<tr>\n<td>422</td>\n<td>Request cannot be accepted</td>\n<td>Read message and, when present, errors. Correct the request fields or check the job's current state.</td>\n</tr>\n<tr>\n<td>429</td>\n<td>Rate limit reached</td>\n<td>Wait for the Retry-After period before sending another request.</td>\n</tr>\n<tr>\n<td>5xx</td>\n<td>Server or connected-service error</td>\n<td>Check the result before retrying a create request. Contact support if the issue persists.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Validation errors normally include a message and an errors object keyed by field name. Some state-related errors, such as trying to delete an in-progress job, include only a message.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"5479160","collectionId":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","publishedId":"2sA3s1nrgx","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2024-12-04T16:31:08.000Z"},"item":[{"name":"01 · Getting started","item":[{"name":"Check API version","id":"0725bb79-a769-436e-95cc-032c7970c7d4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"{{base_url}}/api/public/v1/version","description":"<p>Check that your base URL and API token are working.</p>\n<p><strong>Authentication is required</strong>, including for this endpoint.</p>\n<p><strong>Success: 200 OK</strong></p>\n<p>Returns <code>version</code> directly in the response body. This endpoint does not use the <code>data</code> wrapper used by resource endpoints.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","type":"collection"}},"urlObject":{"path":["api","public","v1","version"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[{"id":"7ccdad49-d44d-408b-8dbb-97dc489a9ffc","name":"200 — API version","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"{{base_url}}/api/public/v1/version","description":"Check that your base URL and API token are working.\n\n**Authentication is required**, including for this endpoint.\n\n**Success: 200 OK**\n\nReturns `version` directly in the response body. This endpoint does not use the `data` wrapper used by resource endpoints."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"version\": \"v1.0\"\n}"},{"id":"05ed9789-7e72-4064-977b-501f6d737613","name":"401 — Missing or invalid API token","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"{{base_url}}/api/public/v1/version","description":"Check that your base URL and API token are working.\n\n**Authentication is required**, including for this endpoint.\n\n**Success: 200 OK**\n\nReturns `version` directly in the response body. This endpoint does not use the `data` wrapper used by resource endpoints."},"status":"Unauthorized","code":401,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"message\": \"Unauthenticated.\"\n}"}],"_postman_id":"0725bb79-a769-436e-95cc-032c7970c7d4"}],"id":"4599771a-4ebb-47aa-b04c-ac7585da183b","description":"<p>Confirm your API URL and service-provider token. Read the introduction for authentication and usage instructions.</p>\n","_postman_id":"4599771a-4ebb-47aa-b04c-ac7585da183b","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","type":"collection"}}},{"name":"02 · Housing providers","item":[{"name":"List housing providers","id":"60b9f62a-a0f9-47d2-ad3a-e902868e4b3a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"{{base_url}}/api/public/v1/housing-providers","description":"<p>List the housing providers available to your service provider, ordered by name.</p>\n<p>Use an ID from this response as <code>housing_provider_id</code> when searching properties, listing templates, and creating jobs.</p>\n<p><strong>Parameters:</strong> none.</p>\n<p><strong>Success: 200 OK</strong></p>\n<p>Returns <code>data</code> as an array of objects with <code>id</code>, <code>name</code>, and <code>address</code>. An address can be null. An empty result is <code>{\"data\": []}</code>. This endpoint is not paginated.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","type":"collection"}},"urlObject":{"path":["api","public","v1","housing-providers"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[{"id":"4108bdb4-2292-440e-9806-8078c102fabe","name":"200 — Available housing providers","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"{{base_url}}/api/public/v1/housing-providers","description":"List the housing providers available to your service provider, ordered by name.\n\nUse an ID from this response as `housing_provider_id` when searching properties, listing templates, and creating jobs.\n\n**Parameters:** none.\n\n**Success: 200 OK**\n\nReturns `data` as an array of objects with `id`, `name`, and `address`. An address can be null. An empty result is `{\"data\": []}`. This endpoint is not paginated."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"data\": [\n    {\n      \"id\": 101,\n      \"name\": \"Example Housing Provider\",\n      \"address\": \"Example address\"\n    }\n  ]\n}"}],"_postman_id":"60b9f62a-a0f9-47d2-ad3a-e902868e4b3a"}],"id":"de201090-3d61-4465-aed5-34757a8afe22","description":"<p>Discover housing providers available to your service provider.</p>\n","_postman_id":"de201090-3d61-4465-aed5-34757a8afe22","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","type":"collection"}}},{"name":"03 · Properties","item":[{"name":"Search properties","id":"c0a1dc72-d481-484f-9a4b-3f67b0376a70","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"housing_provider_id\": {{housing_provider_id}},\n  \"search\": \"{{property_search}}\",\n  \"page\": {{page}}\n}","options":{"raw":{"language":"json"}}},"url":"{{base_url}}/api/public/v1/properties/search","description":"<p>Find properties for a housing provider available to your service provider. Use a returned <code>id</code> as <code>property_id</code> when creating a job.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body field</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>housing_provider_id</td>\n<td>Yes</td>\n<td>Integer. Use an ID from List housing providers.</td>\n</tr>\n<tr>\n<td>search</td>\n<td>No</td>\n<td>String, up to 255 characters, or null. Search text for the property. Omit it or send null to request an unfiltered page.</td>\n</tr>\n<tr>\n<td>page</td>\n<td>No</td>\n<td>Integer of at least 1. Defaults to 1.</td>\n</tr>\n</tbody>\n</table>\n</div><p>For properties held in TC Go, search matches the address, town, county, UPRN, or postcode. For connected True Compliance properties, matching is handled by the connected property service.</p>\n<p><strong>Success: 200 OK</strong></p>\n<p>Returns a paginated <code>data</code> array with <code>links</code> and <code>meta</code>. Each property contains <code>id</code>, <code>uprn</code>, <code>address_1</code>, <code>address_2</code>, <code>town</code>, <code>county</code>, <code>postcode</code>, and boolean <code>live</code>. Address fields can be null where no value is held.</p>\n<p><strong>Next page:</strong> send this same POST again, keeping the housing provider and search text, and increasing <code>page</code>. Do not open a pagination link as a GET request: this endpoint accepts POST.</p>\n<p><strong>Errors:</strong> 404 if the housing provider is not available to your service provider; 422 for an invalid body.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","type":"collection"}},"urlObject":{"path":["api","public","v1","properties","search"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[{"id":"e9c8d57b-3007-4f1c-8770-ed378caa3721","name":"200 — Property search results","originalRequest":{"method":"POST","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"housing_provider_id\": {{housing_provider_id}},\n  \"search\": \"{{property_search}}\",\n  \"page\": {{page}}\n}","options":{"raw":{"language":"json"}}},"url":"{{base_url}}/api/public/v1/properties/search","description":"Find properties for a housing provider available to your service provider. Use a returned `id` as `property_id` when creating a job.\n\n| Body field | Required | Description |\n| --- | --- | --- |\n| housing_provider_id | Yes | Integer. Use an ID from List housing providers. |\n| search | No | String, up to 255 characters, or null. Search text for the property. Omit it or send null to request an unfiltered page. |\n| page | No | Integer of at least 1. Defaults to 1. |\n\nFor properties held in TC Go, search matches the address, town, county, UPRN, or postcode. For connected True Compliance properties, matching is handled by the connected property service.\n\n**Success: 200 OK**\n\nReturns a paginated `data` array with `links` and `meta`. Each property contains `id`, `uprn`, `address_1`, `address_2`, `town`, `county`, `postcode`, and boolean `live`. Address fields can be null where no value is held.\n\n**Next page:** send this same POST again, keeping the housing provider and search text, and increasing `page`. Do not open a pagination link as a GET request: this endpoint accepts POST.\n\n**Errors:** 404 if the housing provider is not available to your service provider; 422 for an invalid body."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"data\": [\n    {\n      \"id\": 301,\n      \"uprn\": \"EXAMPLE-UPRN\",\n      \"address_1\": \"Example property address\",\n      \"address_2\": null,\n      \"town\": \"Example town\",\n      \"county\": null,\n      \"postcode\": \"EXAMPLE\",\n      \"live\": true\n    }\n  ],\n  \"links\": {\n    \"first\": \"https://api.example.com/api/public/v1/properties/search?page=1\",\n    \"last\": \"https://api.example.com/api/public/v1/properties/search?page=1\",\n    \"prev\": null,\n    \"next\": null\n  },\n  \"meta\": {\n    \"current_page\": 1,\n    \"from\": 1,\n    \"last_page\": 1,\n    \"links\": [\n      {\n        \"url\": null,\n        \"label\": \"&laquo; Previous\",\n        \"active\": false\n      },\n      {\n        \"url\": \"https://api.example.com/api/public/v1/properties/search?page=1\",\n        \"label\": \"1\",\n        \"active\": true\n      },\n      {\n        \"url\": null,\n        \"label\": \"Next &raquo;\",\n        \"active\": false\n      }\n    ],\n    \"path\": \"https://api.example.com/api/public/v1/properties/search\",\n    \"per_page\": 15,\n    \"to\": 1,\n    \"total\": 1\n  }\n}"}],"_postman_id":"c0a1dc72-d481-484f-9a4b-3f67b0376a70"}],"id":"19049c1e-ef4c-445e-9476-a36b46821eb4","description":"<p>Find the property ID needed to create a job for a housing provider.</p>\n","_postman_id":"19049c1e-ef4c-445e-9476-a36b46821eb4","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","type":"collection"}}},{"name":"06 · Documents","item":[{"name":"Get document","id":"53a85899-1575-4b41-8b6a-595aabdb0705","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"{{base_url}}/api/public/v1/documents/{{document_id}}","description":"<p>Get document details and any saved document data for a document belonging to your service provider.</p>\n<p><strong>Path parameter:</strong> <code>document_id</code> — TC Go document ID from your document records. This is a different ID from job_id and tc_document_id. The public job endpoints do not return document IDs.</p>\n<p><strong>Success: 200 OK</strong></p>\n<p>Returns one document in <code>data</code>.</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>id</td>\n<td>TC Go document ID.</td>\n</tr>\n<tr>\n<td>tc_document_id</td>\n<td>Linked True Compliance document ID, or null.</td>\n</tr>\n<tr>\n<td>go_job_id</td>\n<td>Associated TC Go job ID.</td>\n</tr>\n<tr>\n<td>document_status</td>\n<td>Object containing status id and name, or null. Use this to check the document's current stage.</td>\n</tr>\n<tr>\n<td>filename</td>\n<td>Document filename, or null if not yet available.</td>\n</tr>\n<tr>\n<td>storage_filename</td>\n<td>Storage object key, or null if not yet available. This is not a download URL.</td>\n</tr>\n<tr>\n<td>document_type</td>\n<td>Document type ID and name, or null.</td>\n</tr>\n<tr>\n<td>housing_provider</td>\n<td>Housing provider ID, name, and address, or null.</td>\n</tr>\n<tr>\n<td>service_provider</td>\n<td>Service provider ID and name, or null.</td>\n</tr>\n<tr>\n<td>template</td>\n<td>Template ID and name, or null.</td>\n</tr>\n<tr>\n<td>loaded_by</td>\n<td>User object containing id, first_name, last_name, full_name, and email, or null.</td>\n</tr>\n<tr>\n<td>document_data</td>\n<td>Saved document data, or null when no data has been stored. Its fields and values depend on the document/template.</td>\n</tr>\n<tr>\n<td>created_at / updated_at</td>\n<td>Creation and last-update timestamps.</td>\n</tr>\n<tr>\n<td>deleted_at</td>\n<td>Deletion timestamp; normally null for a document returned by this endpoint.</td>\n</tr>\n</tbody>\n</table>\n</div><p>This is a JSON metadata/data endpoint. It does not return PDF bytes or a signed download URL. Document details, saved data, and file availability can change while the document is being processed.</p>\n<p>The response example shows a document still in progress, so its filename, storage key, and saved data are null.</p>\n<p><strong>Errors:</strong> 404 if the document does not exist, has been deleted, or is unavailable to your service provider.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","type":"collection"}},"urlObject":{"path":["api","public","v1","documents","{{document_id}}"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[{"id":"efb4b65b-0dc1-4b6d-a157-a74eb60bcc59","name":"200 — Document in progress","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"{{base_url}}/api/public/v1/documents/{{document_id}}","description":"Get document details and any saved document data for a document belonging to your service provider.\n\n**Path parameter:** `document_id` — TC Go document ID from your document records. This is a different ID from job_id and tc_document_id. The public job endpoints do not return document IDs.\n\n**Success: 200 OK**\n\nReturns one document in `data`.\n\n| Field | Description |\n| --- | --- |\n| id | TC Go document ID. |\n| tc_document_id | Linked True Compliance document ID, or null. |\n| go_job_id | Associated TC Go job ID. |\n| document_status | Object containing status id and name, or null. Use this to check the document's current stage. |\n| filename | Document filename, or null if not yet available. |\n| storage_filename | Storage object key, or null if not yet available. This is not a download URL. |\n| document_type | Document type ID and name, or null. |\n| housing_provider | Housing provider ID, name, and address, or null. |\n| service_provider | Service provider ID and name, or null. |\n| template | Template ID and name, or null. |\n| loaded_by | User object containing id, first_name, last_name, full_name, and email, or null. |\n| document_data | Saved document data, or null when no data has been stored. Its fields and values depend on the document/template. |\n| created_at / updated_at | Creation and last-update timestamps. |\n| deleted_at | Deletion timestamp; normally null for a document returned by this endpoint. |\n\nThis is a JSON metadata/data endpoint. It does not return PDF bytes or a signed download URL. Document details, saved data, and file availability can change while the document is being processed.\n\nThe response example shows a document still in progress, so its filename, storage key, and saved data are null.\n\n**Errors:** 404 if the document does not exist, has been deleted, or is unavailable to your service provider."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"data\": {\n    \"id\": 601,\n    \"tc_document_id\": null,\n    \"go_job_id\": 401,\n    \"document_status\": {\n      \"id\": 1,\n      \"name\": \"IN_PROGRESS\"\n    },\n    \"filename\": null,\n    \"storage_filename\": null,\n    \"document_type\": {\n      \"id\": 202,\n      \"name\": \"Example Inspection\"\n    },\n    \"housing_provider\": {\n      \"id\": 101,\n      \"name\": \"Example Housing Provider\",\n      \"address\": \"Example address\"\n    },\n    \"service_provider\": {\n      \"id\": 102,\n      \"name\": \"Example Service Provider\"\n    },\n    \"template\": {\n      \"id\": 201,\n      \"name\": \"Example Inspection\"\n    },\n    \"loaded_by\": {\n      \"id\": 502,\n      \"first_name\": \"Example\",\n      \"last_name\": \"Engineer\",\n      \"full_name\": \"Example Engineer\",\n      \"email\": \"engineer@example.com\"\n    },\n    \"document_data\": null,\n    \"created_at\": \"2030-01-15T09:00:00.000000Z\",\n    \"updated_at\": \"2030-01-15T09:00:00.000000Z\",\n    \"deleted_at\": null\n  }\n}"}],"_postman_id":"53a85899-1575-4b41-8b6a-595aabdb0705"}],"id":"3d9d572a-9fe3-4b4d-be61-e0a7cf4df8a0","description":"<p>Retrieve document details and saved data using an existing TC Go document ID.</p>\n","_postman_id":"3d9d572a-9fe3-4b4d-be61-e0a7cf4df8a0","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","type":"collection"}}},{"name":"05 · Jobs","item":[{"name":"List jobs","id":"d7ec2a54-a5e1-4ddf-b778-d1b95e98354e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"{{base_url}}/api/public/v1/jobs?page={{page}}","description":"<p>List jobs for your service provider, newest first by creation date. Results are paginated.</p>\n<p>Include only the query parameters you want to filter by. Filters used together narrow the result to jobs matching all selected criteria.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Query parameter</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>page</td>\n<td>No</td>\n<td>Page number. Start with 1.</td>\n</tr>\n<tr>\n<td>housing_provider_id</td>\n<td>No</td>\n<td>Integer of at least 1. Filter by housing provider ID.</td>\n</tr>\n<tr>\n<td>status</td>\n<td>No</td>\n<td>One status or comma-separated statuses, for example open,unassigned.</td>\n</tr>\n<tr>\n<td>created_at_from</td>\n<td>No</td>\n<td>Inclusive lower creation-date limit, YYYY-MM-DD.</td>\n</tr>\n<tr>\n<td>created_at_to</td>\n<td>No</td>\n<td>Inclusive upper creation-date limit, YYYY-MM-DD; must be on or after created_at_from when both are provided.</td>\n</tr>\n<tr>\n<td>updated_at_from</td>\n<td>No</td>\n<td>Inclusive lower last-update-date limit, YYYY-MM-DD.</td>\n</tr>\n<tr>\n<td>updated_at_to</td>\n<td>No</td>\n<td>Inclusive upper last-update-date limit, YYYY-MM-DD; must be on or after updated_at_from when both are provided.</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Supported statuses:</strong> <code>unassigned</code>, <code>open</code>, <code>in_progress</code>, <code>completed</code>, <code>abandoned</code>, <code>cancelled_by_admin</code>, <code>cancelled_conflicted</code>.</p>\n<p>You can alternatively send statuses using array query parameters such as <code>status[]=open&amp;status[]=unassigned</code>.</p>\n<p><strong>Success: 200 OK</strong></p>\n<p>Returns <code>data</code> as a job array, plus <code>links</code> and <code>meta</code>. Increase <code>page</code> until <code>meta.current_page</code> reaches <code>meta.last_page</code>, preserving every filter on each request. Pagination links may not retain your filters. No page-size parameter is supported.</p>\n<p>An empty result has an empty <code>data</code> array. Jobs whose housing provider is unavailable are excluded from this list.</p>\n<p><strong>Errors:</strong> 422 for an invalid filter.</p>\n<h3 id=\"job-response\">Job response</h3>\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>id</td>\n<td>TC Go job ID. Use it for Get, Update, and Delete job.</td>\n</tr>\n<tr>\n<td>housing_provider</td>\n<td>Housing provider with ID, name, and address.</td>\n</tr>\n<tr>\n<td>templates</td>\n<td>Attached templates with ID, name, document type name, and requires_approval. Housing provider details within each template are included only when available.</td>\n</tr>\n<tr>\n<td>property</td>\n<td>Property details, or null if they cannot be retrieved. The additional property fields can vary with the housing provider's property source.</td>\n</tr>\n<tr>\n<td>reference</td>\n<td>Your reference, or null.</td>\n</tr>\n<tr>\n<td>source</td>\n<td>Job source: tc or tcgo.</td>\n</tr>\n<tr>\n<td>created_by</td>\n<td>User object with id, first_name, last_name, full_name, and email. Jobs created through this API use the API integration user.</td>\n</tr>\n<tr>\n<td>assigned_to</td>\n<td>Assignee user object, or null. Requests use an email address; responses use a user object.</td>\n</tr>\n<tr>\n<td>approved_by</td>\n<td>Approver user object, or null. Requests use an email address; responses use a user object.</td>\n</tr>\n<tr>\n<td>status</td>\n<td>Current job status.</td>\n</tr>\n<tr>\n<td>description</td>\n<td>Job description, or null.</td>\n</tr>\n<tr>\n<td>deadline</td>\n<td>Deadline serialized as a date/time string.</td>\n</tr>\n<tr>\n<td>appointment_date</td>\n<td>Appointment date serialized as a date/time string, or null.</td>\n</tr>\n<tr>\n<td>appointment_time</td>\n<td>Appointment time in HH:mm:ss, or null.</td>\n</tr>\n<tr>\n<td>appointment_period</td>\n<td>am, pm, or null.</td>\n</tr>\n<tr>\n<td>created_at / updated_at</td>\n<td>Creation and last-update timestamps.</td>\n</tr>\n</tbody>\n</table>\n</div><p>The public job response does not include a list of documents or their IDs. Use a document ID you already have from your TC Go document records with Get document.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","type":"collection"}},"urlObject":{"path":["api","public","v1","jobs"],"host":["{{base_url}}"],"query":[{"description":{"content":"<p>Page number; start with 1.</p>\n","type":"text/plain"},"key":"page","value":"{{page}}"},{"disabled":true,"description":{"content":"<p>Optional housing provider filter.</p>\n","type":"text/plain"},"key":"housing_provider_id","value":"{{housing_provider_id}}"},{"disabled":true,"description":{"content":"<p>Optional comma-separated job statuses.</p>\n","type":"text/plain"},"key":"status","value":"open,unassigned"},{"disabled":true,"description":{"content":"<p>Optional inclusive creation-date start. Replace this illustrative date.</p>\n","type":"text/plain"},"key":"created_at_from","value":"2030-01-01"},{"disabled":true,"description":{"content":"<p>Optional inclusive creation-date end. Replace this illustrative date.</p>\n","type":"text/plain"},"key":"created_at_to","value":"2030-01-31"},{"disabled":true,"description":{"content":"<p>Optional inclusive update-date start. Replace this illustrative date.</p>\n","type":"text/plain"},"key":"updated_at_from","value":"2030-01-01"},{"disabled":true,"description":{"content":"<p>Optional inclusive update-date end. Replace this illustrative date.</p>\n","type":"text/plain"},"key":"updated_at_to","value":"2030-01-31"}],"variable":[]}},"response":[{"id":"a3484699-4f9a-49a3-bce2-3a4f729be12b","name":"200 — Paginated jobs","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"{{base_url}}/api/public/v1/jobs?page={{page}}","host":["{{base_url}}"],"path":["api","public","v1","jobs"],"query":[{"key":"page","value":"{{page}}","description":"Page number; start with 1."},{"key":"housing_provider_id","value":"{{housing_provider_id}}","description":"Optional housing provider filter.","disabled":true},{"key":"status","value":"open,unassigned","description":"Optional comma-separated job statuses.","disabled":true},{"key":"created_at_from","value":"2030-01-01","description":"Optional inclusive creation-date start. Replace this illustrative date.","disabled":true},{"key":"created_at_to","value":"2030-01-31","description":"Optional inclusive creation-date end. Replace this illustrative date.","disabled":true},{"key":"updated_at_from","value":"2030-01-01","description":"Optional inclusive update-date start. Replace this illustrative date.","disabled":true},{"key":"updated_at_to","value":"2030-01-31","description":"Optional inclusive update-date end. Replace this illustrative date.","disabled":true}]},"description":"List jobs for your service provider, newest first by creation date. Results are paginated.\n\nInclude only the query parameters you want to filter by. Filters used together narrow the result to jobs matching all selected criteria.\n\n| Query parameter | Required | Description |\n| --- | --- | --- |\n| page | No | Page number. Start with 1. |\n| housing_provider_id | No | Integer of at least 1. Filter by housing provider ID. |\n| status | No | One status or comma-separated statuses, for example open,unassigned. |\n| created_at_from | No | Inclusive lower creation-date limit, YYYY-MM-DD. |\n| created_at_to | No | Inclusive upper creation-date limit, YYYY-MM-DD; must be on or after created_at_from when both are provided. |\n| updated_at_from | No | Inclusive lower last-update-date limit, YYYY-MM-DD. |\n| updated_at_to | No | Inclusive upper last-update-date limit, YYYY-MM-DD; must be on or after updated_at_from when both are provided. |\n\n**Supported statuses:** `unassigned`, `open`, `in_progress`, `completed`, `abandoned`, `cancelled_by_admin`, `cancelled_conflicted`.\n\nYou can alternatively send statuses using array query parameters such as `status[]=open&status[]=unassigned`.\n\n**Success: 200 OK**\n\nReturns `data` as a job array, plus `links` and `meta`. Increase `page` until `meta.current_page` reaches `meta.last_page`, preserving every filter on each request. Pagination links may not retain your filters. No page-size parameter is supported.\n\nAn empty result has an empty `data` array. Jobs whose housing provider is unavailable are excluded from this list.\n\n**Errors:** 422 for an invalid filter.\n\n### Job response\n\n| Field | Description |\n| --- | --- |\n| id | TC Go job ID. Use it for Get, Update, and Delete job. |\n| housing_provider | Housing provider with ID, name, and address. |\n| templates | Attached templates with ID, name, document type name, and requires_approval. Housing provider details within each template are included only when available. |\n| property | Property details, or null if they cannot be retrieved. The additional property fields can vary with the housing provider's property source. |\n| reference | Your reference, or null. |\n| source | Job source: tc or tcgo. |\n| created_by | User object with id, first_name, last_name, full_name, and email. Jobs created through this API use the API integration user. |\n| assigned_to | Assignee user object, or null. Requests use an email address; responses use a user object. |\n| approved_by | Approver user object, or null. Requests use an email address; responses use a user object. |\n| status | Current job status. |\n| description | Job description, or null. |\n| deadline | Deadline serialized as a date/time string. |\n| appointment_date | Appointment date serialized as a date/time string, or null. |\n| appointment_time | Appointment time in HH:mm:ss, or null. |\n| appointment_period | am, pm, or null. |\n| created_at / updated_at | Creation and last-update timestamps. |\n\nThe public job response does not include a list of documents or their IDs. Use a document ID you already have from your TC Go document records with Get document."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"data\": [\n    {\n      \"id\": 401,\n      \"housing_provider\": {\n        \"id\": 101,\n        \"name\": \"Example Housing Provider\",\n        \"address\": \"Example address\"\n      },\n      \"templates\": [\n        {\n          \"id\": 201,\n          \"name\": \"Example Inspection\",\n          \"document_type\": \"Example Inspection\",\n          \"requires_approval\": false\n        }\n      ],\n      \"property\": {\n        \"id\": 301,\n        \"uprn\": \"EXAMPLE-UPRN\",\n        \"address_1\": \"Example property address\",\n        \"address_2\": null,\n        \"town\": \"Example town\",\n        \"county\": null,\n        \"postcode\": \"EXAMPLE\",\n        \"live\": true,\n        \"service_provider_id\": 102,\n        \"housing_provider_id\": 101,\n        \"landlord\": null,\n        \"created_at\": \"2030-01-15T09:00:00.000000Z\",\n        \"updated_at\": \"2030-01-15T09:00:00.000000Z\",\n        \"deleted_at\": null,\n        \"property_data\": []\n      },\n      \"reference\": \"EXAMPLE-001\",\n      \"source\": \"tcgo\",\n      \"created_by\": {\n        \"id\": 501,\n        \"first_name\": \"Public\",\n        \"last_name\": \"API\",\n        \"full_name\": \"Public API\",\n        \"email\": \"integration@example.com\"\n      },\n      \"assigned_to\": null,\n      \"approved_by\": null,\n      \"status\": \"unassigned\",\n      \"description\": \"Example inspection job\",\n      \"deadline\": \"2030-01-31T00:00:00.000000Z\",\n      \"appointment_date\": null,\n      \"appointment_time\": null,\n      \"appointment_period\": null,\n      \"created_at\": \"2030-01-15T09:00:00.000000Z\",\n      \"updated_at\": \"2030-01-15T09:00:00.000000Z\"\n    }\n  ],\n  \"links\": {\n    \"first\": \"https://api.example.com/api/public/v1/jobs?page=1\",\n    \"last\": \"https://api.example.com/api/public/v1/jobs?page=1\",\n    \"prev\": null,\n    \"next\": null\n  },\n  \"meta\": {\n    \"current_page\": 1,\n    \"from\": 1,\n    \"last_page\": 1,\n    \"links\": [\n      {\n        \"url\": null,\n        \"label\": \"&laquo; Previous\",\n        \"active\": false\n      },\n      {\n        \"url\": \"https://api.example.com/api/public/v1/jobs?page=1\",\n        \"label\": \"1\",\n        \"active\": true\n      },\n      {\n        \"url\": null,\n        \"label\": \"Next &raquo;\",\n        \"active\": false\n      }\n    ],\n    \"path\": \"https://api.example.com/api/public/v1/jobs\",\n    \"per_page\": 15,\n    \"to\": 1,\n    \"total\": 1\n  }\n}"},{"id":"6837eea8-35fe-4c22-9e8b-3c94ebfc3134","name":"200 — No matching jobs","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"{{base_url}}/api/public/v1/jobs?page={{page}}","host":["{{base_url}}"],"path":["api","public","v1","jobs"],"query":[{"key":"page","value":"{{page}}","description":"Page number; start with 1."},{"key":"housing_provider_id","value":"{{housing_provider_id}}","description":"Optional housing provider filter.","disabled":true},{"key":"status","value":"open,unassigned","description":"Optional comma-separated job statuses.","disabled":true},{"key":"created_at_from","value":"2030-01-01","description":"Optional inclusive creation-date start. Replace this illustrative date.","disabled":true},{"key":"created_at_to","value":"2030-01-31","description":"Optional inclusive creation-date end. Replace this illustrative date.","disabled":true},{"key":"updated_at_from","value":"2030-01-01","description":"Optional inclusive update-date start. Replace this illustrative date.","disabled":true},{"key":"updated_at_to","value":"2030-01-31","description":"Optional inclusive update-date end. Replace this illustrative date.","disabled":true}]},"description":"List jobs for your service provider, newest first by creation date. Results are paginated.\n\nInclude only the query parameters you want to filter by. Filters used together narrow the result to jobs matching all selected criteria.\n\n| Query parameter | Required | Description |\n| --- | --- | --- |\n| page | No | Page number. Start with 1. |\n| housing_provider_id | No | Integer of at least 1. Filter by housing provider ID. |\n| status | No | One status or comma-separated statuses, for example open,unassigned. |\n| created_at_from | No | Inclusive lower creation-date limit, YYYY-MM-DD. |\n| created_at_to | No | Inclusive upper creation-date limit, YYYY-MM-DD; must be on or after created_at_from when both are provided. |\n| updated_at_from | No | Inclusive lower last-update-date limit, YYYY-MM-DD. |\n| updated_at_to | No | Inclusive upper last-update-date limit, YYYY-MM-DD; must be on or after updated_at_from when both are provided. |\n\n**Supported statuses:** `unassigned`, `open`, `in_progress`, `completed`, `abandoned`, `cancelled_by_admin`, `cancelled_conflicted`.\n\nYou can alternatively send statuses using array query parameters such as `status[]=open&status[]=unassigned`.\n\n**Success: 200 OK**\n\nReturns `data` as a job array, plus `links` and `meta`. Increase `page` until `meta.current_page` reaches `meta.last_page`, preserving every filter on each request. Pagination links may not retain your filters. No page-size parameter is supported.\n\nAn empty result has an empty `data` array. Jobs whose housing provider is unavailable are excluded from this list.\n\n**Errors:** 422 for an invalid filter.\n\n### Job response\n\n| Field | Description |\n| --- | --- |\n| id | TC Go job ID. Use it for Get, Update, and Delete job. |\n| housing_provider | Housing provider with ID, name, and address. |\n| templates | Attached templates with ID, name, document type name, and requires_approval. Housing provider details within each template are included only when available. |\n| property | Property details, or null if they cannot be retrieved. The additional property fields can vary with the housing provider's property source. |\n| reference | Your reference, or null. |\n| source | Job source: tc or tcgo. |\n| created_by | User object with id, first_name, last_name, full_name, and email. Jobs created through this API use the API integration user. |\n| assigned_to | Assignee user object, or null. Requests use an email address; responses use a user object. |\n| approved_by | Approver user object, or null. Requests use an email address; responses use a user object. |\n| status | Current job status. |\n| description | Job description, or null. |\n| deadline | Deadline serialized as a date/time string. |\n| appointment_date | Appointment date serialized as a date/time string, or null. |\n| appointment_time | Appointment time in HH:mm:ss, or null. |\n| appointment_period | am, pm, or null. |\n| created_at / updated_at | Creation and last-update timestamps. |\n\nThe public job response does not include a list of documents or their IDs. Use a document ID you already have from your TC Go document records with Get document."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"data\": [],\n  \"links\": {\n    \"first\": \"https://api.example.com/api/public/v1/jobs?page=1\",\n    \"last\": \"https://api.example.com/api/public/v1/jobs?page=1\",\n    \"prev\": null,\n    \"next\": null\n  },\n  \"meta\": {\n    \"current_page\": 1,\n    \"from\": null,\n    \"last_page\": 1,\n    \"links\": [\n      {\n        \"url\": null,\n        \"label\": \"&laquo; Previous\",\n        \"active\": false\n      },\n      {\n        \"url\": \"https://api.example.com/api/public/v1/jobs?page=1\",\n        \"label\": \"1\",\n        \"active\": true\n      },\n      {\n        \"url\": null,\n        \"label\": \"Next &raquo;\",\n        \"active\": false\n      }\n    ],\n    \"path\": \"https://api.example.com/api/public/v1/jobs\",\n    \"per_page\": 15,\n    \"to\": null,\n    \"total\": 0\n  }\n}"}],"_postman_id":"d7ec2a54-a5e1-4ddf-b778-d1b95e98354e"},{"name":"Create job","id":"bec9b03d-b01f-4b32-93e3-c9271de0925e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"housing_provider_id\": {{housing_provider_id}},\n  \"template_id\": {{template_id}},\n  \"property_id\": {{property_id}},\n  \"assigned_to\": null,\n  \"approved_by\": null,\n  \"deadline\": \"{{deadline}}\",\n  \"reference\": \"EXAMPLE-001\",\n  \"description\": \"Example inspection job\",\n  \"appointment_date\": null,\n  \"appointment_time\": null,\n  \"appointment_period\": null\n}","options":{"raw":{"language":"json"}}},"url":"{{base_url}}/api/public/v1/jobs","description":"<p>Create a job using an existing published template and property.</p>\n<p><strong>Before creating a job:</strong> use List housing providers, Search properties, and List published templates to find the required IDs. Provide a <code>deadline</code> on or after today in <code>YYYY-MM-DD</code> format.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body field</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>housing_provider_id</td>\n<td>Yes</td>\n<td>Integer. Housing provider available to your service provider.</td>\n</tr>\n<tr>\n<td>template_id</td>\n<td>Yes</td>\n<td>Integer. Published template belonging to your service provider and the selected housing provider.</td>\n</tr>\n<tr>\n<td>property_id</td>\n<td>Yes</td>\n<td>Integer. Property belonging to the selected housing provider.</td>\n</tr>\n<tr>\n<td>assigned_to</td>\n<td>Yes; nullable</td>\n<td>Existing user's email address, or null to leave the job unassigned. The key must be present.</td>\n</tr>\n<tr>\n<td>approved_by</td>\n<td>Yes; nullable</td>\n<td>Existing approver's email address, or null. The key must be present. See approval rules below.</td>\n</tr>\n<tr>\n<td>deadline</td>\n<td>Yes</td>\n<td>Date on or after today. Use YYYY-MM-DD.</td>\n</tr>\n<tr>\n<td>reference</td>\n<td>No</td>\n<td>String up to 255 characters, or null. Your reference; not an idempotency key.</td>\n</tr>\n<tr>\n<td>description</td>\n<td>No</td>\n<td>String, or null.</td>\n</tr>\n<tr>\n<td>appointment_date</td>\n<td>No</td>\n<td>Date on or after today and strictly before the deadline, or null. Use YYYY-MM-DD.</td>\n</tr>\n<tr>\n<td>appointment_time</td>\n<td>No</td>\n<td>Time in HH:mm:ss, for example 09:30:00, or null.</td>\n</tr>\n<tr>\n<td>appointment_period</td>\n<td>No</td>\n<td>am, pm, or null.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"assignment-and-approval\">Assignment and approval</h3>\n<ul>\n<li>Both email addresses must refer to users already available to your service provider and the selected housing provider. This endpoint does not create or invite users.</li>\n<li>The approver must have permission to approve jobs (an admin role for that housing provider).</li>\n<li>If the template does not require approval, approved_by must be null.</li>\n<li>If the template requires approval and assigned_to is set, approved_by must also be set and must be a different user.</li>\n<li>Both assigned_to and approved_by can be null when creating an unassigned job.</li>\n</ul>\n<p>The example request creates an unassigned job. To assign it, replace null in assigned_to with an existing user's email, for example <code>\"engineer@example.com\"</code>. If approval is required, also set approved_by to a different eligible user's email, for example <code>\"approver@example.com\"</code>.</p>\n<p><strong>Success: 201 Created</strong></p>\n<p>Returns the new job in <code>data</code>. Keep <code>data.id</code> and use it as the job ID when retrieving, updating, or deleting this job. A job is created with status <code>open</code> when an assignee is supplied, or <code>unassigned</code> otherwise. The selected template becomes the required template. Assigning a job can notify the assignee.</p>\n<p>Sending this request again creates another job. Before retrying after an uncertain response, check whether the job was created.</p>\n<p><strong>Errors:</strong> 404 for an unavailable housing provider or published template; 422 for invalid fields, an unavailable property or user, or an invalid approval selection.</p>\n<h3 id=\"job-response\">Job response</h3>\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>id</td>\n<td>TC Go job ID. Use it for Get, Update, and Delete job.</td>\n</tr>\n<tr>\n<td>housing_provider</td>\n<td>Housing provider with ID, name, and address.</td>\n</tr>\n<tr>\n<td>templates</td>\n<td>Attached templates with ID, name, document type name, and requires_approval. Housing provider details within each template are included only when available.</td>\n</tr>\n<tr>\n<td>property</td>\n<td>Property details, or null if they cannot be retrieved. The additional property fields can vary with the housing provider's property source.</td>\n</tr>\n<tr>\n<td>reference</td>\n<td>Your reference, or null.</td>\n</tr>\n<tr>\n<td>source</td>\n<td>Job source: tc or tcgo.</td>\n</tr>\n<tr>\n<td>created_by</td>\n<td>User object with id, first_name, last_name, full_name, and email. Jobs created through this API use the API integration user.</td>\n</tr>\n<tr>\n<td>assigned_to</td>\n<td>Assignee user object, or null. Requests use an email address; responses use a user object.</td>\n</tr>\n<tr>\n<td>approved_by</td>\n<td>Approver user object, or null. Requests use an email address; responses use a user object.</td>\n</tr>\n<tr>\n<td>status</td>\n<td>Current job status.</td>\n</tr>\n<tr>\n<td>description</td>\n<td>Job description, or null.</td>\n</tr>\n<tr>\n<td>deadline</td>\n<td>Deadline serialized as a date/time string.</td>\n</tr>\n<tr>\n<td>appointment_date</td>\n<td>Appointment date serialized as a date/time string, or null.</td>\n</tr>\n<tr>\n<td>appointment_time</td>\n<td>Appointment time in HH:mm:ss, or null.</td>\n</tr>\n<tr>\n<td>appointment_period</td>\n<td>am, pm, or null.</td>\n</tr>\n<tr>\n<td>created_at / updated_at</td>\n<td>Creation and last-update timestamps.</td>\n</tr>\n</tbody>\n</table>\n</div><p>The public job response does not include a list of documents or their IDs. Use a document ID you already have from your TC Go document records with Get document.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","type":"collection"}},"urlObject":{"path":["api","public","v1","jobs"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[{"id":"8925dc29-ac90-4fb3-8a0a-128f55f30ab3","name":"201 — Unassigned job created","originalRequest":{"method":"POST","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"housing_provider_id\": {{housing_provider_id}},\n  \"template_id\": {{template_id}},\n  \"property_id\": {{property_id}},\n  \"assigned_to\": null,\n  \"approved_by\": null,\n  \"deadline\": \"{{deadline}}\",\n  \"reference\": \"EXAMPLE-001\",\n  \"description\": \"Example inspection job\",\n  \"appointment_date\": null,\n  \"appointment_time\": null,\n  \"appointment_period\": null\n}","options":{"raw":{"language":"json"}}},"url":"{{base_url}}/api/public/v1/jobs","description":"Create a job using an existing published template and property.\n\n**Before creating a job:** use List housing providers, Search properties, and List published templates to find the required IDs. Provide a `deadline` on or after today in `YYYY-MM-DD` format.\n\n| Body field | Required | Description |\n| --- | --- | --- |\n| housing_provider_id | Yes | Integer. Housing provider available to your service provider. |\n| template_id | Yes | Integer. Published template belonging to your service provider and the selected housing provider. |\n| property_id | Yes | Integer. Property belonging to the selected housing provider. |\n| assigned_to | Yes; nullable | Existing user's email address, or null to leave the job unassigned. The key must be present. |\n| approved_by | Yes; nullable | Existing approver's email address, or null. The key must be present. See approval rules below. |\n| deadline | Yes | Date on or after today. Use YYYY-MM-DD. |\n| reference | No | String up to 255 characters, or null. Your reference; not an idempotency key. |\n| description | No | String, or null. |\n| appointment_date | No | Date on or after today and strictly before the deadline, or null. Use YYYY-MM-DD. |\n| appointment_time | No | Time in HH:mm:ss, for example 09:30:00, or null. |\n| appointment_period | No | am, pm, or null. |\n\n### Assignment and approval\n\n- Both email addresses must refer to users already available to your service provider and the selected housing provider. This endpoint does not create or invite users.\n- The approver must have permission to approve jobs (an admin role for that housing provider).\n- If the template does not require approval, approved_by must be null.\n- If the template requires approval and assigned_to is set, approved_by must also be set and must be a different user.\n- Both assigned_to and approved_by can be null when creating an unassigned job.\n\nThe example request creates an unassigned job. To assign it, replace null in assigned_to with an existing user's email, for example `\"engineer@example.com\"`. If approval is required, also set approved_by to a different eligible user's email, for example `\"approver@example.com\"`.\n\n**Success: 201 Created**\n\nReturns the new job in `data`. Keep `data.id` and use it as the job ID when retrieving, updating, or deleting this job. A job is created with status `open` when an assignee is supplied, or `unassigned` otherwise. The selected template becomes the required template. Assigning a job can notify the assignee.\n\nSending this request again creates another job. Before retrying after an uncertain response, check whether the job was created.\n\n**Errors:** 404 for an unavailable housing provider or published template; 422 for invalid fields, an unavailable property or user, or an invalid approval selection.\n\n### Job response\n\n| Field | Description |\n| --- | --- |\n| id | TC Go job ID. Use it for Get, Update, and Delete job. |\n| housing_provider | Housing provider with ID, name, and address. |\n| templates | Attached templates with ID, name, document type name, and requires_approval. Housing provider details within each template are included only when available. |\n| property | Property details, or null if they cannot be retrieved. The additional property fields can vary with the housing provider's property source. |\n| reference | Your reference, or null. |\n| source | Job source: tc or tcgo. |\n| created_by | User object with id, first_name, last_name, full_name, and email. Jobs created through this API use the API integration user. |\n| assigned_to | Assignee user object, or null. Requests use an email address; responses use a user object. |\n| approved_by | Approver user object, or null. Requests use an email address; responses use a user object. |\n| status | Current job status. |\n| description | Job description, or null. |\n| deadline | Deadline serialized as a date/time string. |\n| appointment_date | Appointment date serialized as a date/time string, or null. |\n| appointment_time | Appointment time in HH:mm:ss, or null. |\n| appointment_period | am, pm, or null. |\n| created_at / updated_at | Creation and last-update timestamps. |\n\nThe public job response does not include a list of documents or their IDs. Use a document ID you already have from your TC Go document records with Get document."},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"data\": {\n    \"id\": 401,\n    \"housing_provider\": {\n      \"id\": 101,\n      \"name\": \"Example Housing Provider\",\n      \"address\": \"Example address\"\n    },\n    \"templates\": [\n      {\n        \"id\": 201,\n        \"name\": \"Example Inspection\",\n        \"document_type\": \"Example Inspection\",\n        \"requires_approval\": false\n      }\n    ],\n    \"property\": {\n      \"id\": 301,\n      \"uprn\": \"EXAMPLE-UPRN\",\n      \"address_1\": \"Example property address\",\n      \"address_2\": null,\n      \"town\": \"Example town\",\n      \"county\": null,\n      \"postcode\": \"EXAMPLE\",\n      \"live\": true,\n      \"service_provider_id\": 102,\n      \"housing_provider_id\": 101,\n      \"landlord\": null,\n      \"created_at\": \"2030-01-15T09:00:00.000000Z\",\n      \"updated_at\": \"2030-01-15T09:00:00.000000Z\",\n      \"deleted_at\": null,\n      \"property_data\": []\n    },\n    \"reference\": \"EXAMPLE-001\",\n    \"source\": \"tcgo\",\n    \"created_by\": {\n      \"id\": 501,\n      \"first_name\": \"Public\",\n      \"last_name\": \"API\",\n      \"full_name\": \"Public API\",\n      \"email\": \"integration@example.com\"\n    },\n    \"assigned_to\": null,\n    \"approved_by\": null,\n    \"status\": \"unassigned\",\n    \"description\": \"Example inspection job\",\n    \"deadline\": \"2030-01-31T00:00:00.000000Z\",\n    \"appointment_date\": null,\n    \"appointment_time\": null,\n    \"appointment_period\": null,\n    \"created_at\": \"2030-01-15T09:00:00.000000Z\",\n    \"updated_at\": \"2030-01-15T09:00:00.000000Z\"\n  }\n}"},{"id":"1cdbcc20-1fc2-490e-a154-bdcc7b0bfad4","name":"201 — Assigned job created (template without approval)","originalRequest":{"method":"POST","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"housing_provider_id\": {{housing_provider_id}},\n  \"template_id\": {{template_id}},\n  \"property_id\": {{property_id}},\n  \"assigned_to\": \"engineer@example.com\",\n  \"approved_by\": null,\n  \"deadline\": \"{{deadline}}\",\n  \"reference\": \"EXAMPLE-001\",\n  \"description\": \"Example inspection job\",\n  \"appointment_date\": null,\n  \"appointment_time\": null,\n  \"appointment_period\": null\n}","options":{"raw":{"language":"json"}}},"url":"{{base_url}}/api/public/v1/jobs","description":"Create a job using an existing published template and property.\n\n**Before creating a job:** use List housing providers, Search properties, and List published templates to find the required IDs. Provide a `deadline` on or after today in `YYYY-MM-DD` format.\n\n| Body field | Required | Description |\n| --- | --- | --- |\n| housing_provider_id | Yes | Integer. Housing provider available to your service provider. |\n| template_id | Yes | Integer. Published template belonging to your service provider and the selected housing provider. |\n| property_id | Yes | Integer. Property belonging to the selected housing provider. |\n| assigned_to | Yes; nullable | Existing user's email address, or null to leave the job unassigned. The key must be present. |\n| approved_by | Yes; nullable | Existing approver's email address, or null. The key must be present. See approval rules below. |\n| deadline | Yes | Date on or after today. Use YYYY-MM-DD. |\n| reference | No | String up to 255 characters, or null. Your reference; not an idempotency key. |\n| description | No | String, or null. |\n| appointment_date | No | Date on or after today and strictly before the deadline, or null. Use YYYY-MM-DD. |\n| appointment_time | No | Time in HH:mm:ss, for example 09:30:00, or null. |\n| appointment_period | No | am, pm, or null. |\n\n### Assignment and approval\n\n- Both email addresses must refer to users already available to your service provider and the selected housing provider. This endpoint does not create or invite users.\n- The approver must have permission to approve jobs (an admin role for that housing provider).\n- If the template does not require approval, approved_by must be null.\n- If the template requires approval and assigned_to is set, approved_by must also be set and must be a different user.\n- Both assigned_to and approved_by can be null when creating an unassigned job.\n\nThe example request creates an unassigned job. To assign it, replace null in assigned_to with an existing user's email, for example `\"engineer@example.com\"`. If approval is required, also set approved_by to a different eligible user's email, for example `\"approver@example.com\"`.\n\n**Success: 201 Created**\n\nReturns the new job in `data`. Keep `data.id` and use it as the job ID when retrieving, updating, or deleting this job. A job is created with status `open` when an assignee is supplied, or `unassigned` otherwise. The selected template becomes the required template. Assigning a job can notify the assignee.\n\nSending this request again creates another job. Before retrying after an uncertain response, check whether the job was created.\n\n**Errors:** 404 for an unavailable housing provider or published template; 422 for invalid fields, an unavailable property or user, or an invalid approval selection.\n\n### Job response\n\n| Field | Description |\n| --- | --- |\n| id | TC Go job ID. Use it for Get, Update, and Delete job. |\n| housing_provider | Housing provider with ID, name, and address. |\n| templates | Attached templates with ID, name, document type name, and requires_approval. Housing provider details within each template are included only when available. |\n| property | Property details, or null if they cannot be retrieved. The additional property fields can vary with the housing provider's property source. |\n| reference | Your reference, or null. |\n| source | Job source: tc or tcgo. |\n| created_by | User object with id, first_name, last_name, full_name, and email. Jobs created through this API use the API integration user. |\n| assigned_to | Assignee user object, or null. Requests use an email address; responses use a user object. |\n| approved_by | Approver user object, or null. Requests use an email address; responses use a user object. |\n| status | Current job status. |\n| description | Job description, or null. |\n| deadline | Deadline serialized as a date/time string. |\n| appointment_date | Appointment date serialized as a date/time string, or null. |\n| appointment_time | Appointment time in HH:mm:ss, or null. |\n| appointment_period | am, pm, or null. |\n| created_at / updated_at | Creation and last-update timestamps. |\n\nThe public job response does not include a list of documents or their IDs. Use a document ID you already have from your TC Go document records with Get document."},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"data\": {\n    \"id\": 401,\n    \"housing_provider\": {\n      \"id\": 101,\n      \"name\": \"Example Housing Provider\",\n      \"address\": \"Example address\"\n    },\n    \"templates\": [\n      {\n        \"id\": 201,\n        \"name\": \"Example Inspection\",\n        \"document_type\": \"Example Inspection\",\n        \"requires_approval\": false\n      }\n    ],\n    \"property\": {\n      \"id\": 301,\n      \"uprn\": \"EXAMPLE-UPRN\",\n      \"address_1\": \"Example property address\",\n      \"address_2\": null,\n      \"town\": \"Example town\",\n      \"county\": null,\n      \"postcode\": \"EXAMPLE\",\n      \"live\": true,\n      \"service_provider_id\": 102,\n      \"housing_provider_id\": 101,\n      \"landlord\": null,\n      \"created_at\": \"2030-01-15T09:00:00.000000Z\",\n      \"updated_at\": \"2030-01-15T09:00:00.000000Z\",\n      \"deleted_at\": null,\n      \"property_data\": []\n    },\n    \"reference\": \"EXAMPLE-001\",\n    \"source\": \"tcgo\",\n    \"created_by\": {\n      \"id\": 501,\n      \"first_name\": \"Public\",\n      \"last_name\": \"API\",\n      \"full_name\": \"Public API\",\n      \"email\": \"integration@example.com\"\n    },\n    \"assigned_to\": {\n      \"id\": 502,\n      \"first_name\": \"Example\",\n      \"last_name\": \"Engineer\",\n      \"full_name\": \"Example Engineer\",\n      \"email\": \"engineer@example.com\"\n    },\n    \"approved_by\": null,\n    \"status\": \"open\",\n    \"description\": \"Example inspection job\",\n    \"deadline\": \"2030-01-31T00:00:00.000000Z\",\n    \"appointment_date\": null,\n    \"appointment_time\": null,\n    \"appointment_period\": null,\n    \"created_at\": \"2030-01-15T09:00:00.000000Z\",\n    \"updated_at\": \"2030-01-15T09:00:00.000000Z\"\n  }\n}"},{"id":"70195ebb-eba5-48ef-9cab-23db858ae600","name":"422 — Missing required approver (template requiring approval)","originalRequest":{"method":"POST","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"housing_provider_id\": {{housing_provider_id}},\n  \"template_id\": 203,\n  \"property_id\": {{property_id}},\n  \"assigned_to\": \"engineer@example.com\",\n  \"approved_by\": null,\n  \"deadline\": \"{{deadline}}\",\n  \"reference\": \"EXAMPLE-001\",\n  \"description\": \"Example inspection job\",\n  \"appointment_date\": null,\n  \"appointment_time\": null,\n  \"appointment_period\": null\n}","options":{"raw":{"language":"json"}}},"url":"{{base_url}}/api/public/v1/jobs","description":"Create a job using an existing published template and property.\n\n**Before creating a job:** use List housing providers, Search properties, and List published templates to find the required IDs. Provide a `deadline` on or after today in `YYYY-MM-DD` format.\n\n| Body field | Required | Description |\n| --- | --- | --- |\n| housing_provider_id | Yes | Integer. Housing provider available to your service provider. |\n| template_id | Yes | Integer. Published template belonging to your service provider and the selected housing provider. |\n| property_id | Yes | Integer. Property belonging to the selected housing provider. |\n| assigned_to | Yes; nullable | Existing user's email address, or null to leave the job unassigned. The key must be present. |\n| approved_by | Yes; nullable | Existing approver's email address, or null. The key must be present. See approval rules below. |\n| deadline | Yes | Date on or after today. Use YYYY-MM-DD. |\n| reference | No | String up to 255 characters, or null. Your reference; not an idempotency key. |\n| description | No | String, or null. |\n| appointment_date | No | Date on or after today and strictly before the deadline, or null. Use YYYY-MM-DD. |\n| appointment_time | No | Time in HH:mm:ss, for example 09:30:00, or null. |\n| appointment_period | No | am, pm, or null. |\n\n### Assignment and approval\n\n- Both email addresses must refer to users already available to your service provider and the selected housing provider. This endpoint does not create or invite users.\n- The approver must have permission to approve jobs (an admin role for that housing provider).\n- If the template does not require approval, approved_by must be null.\n- If the template requires approval and assigned_to is set, approved_by must also be set and must be a different user.\n- Both assigned_to and approved_by can be null when creating an unassigned job.\n\nThe example request creates an unassigned job. To assign it, replace null in assigned_to with an existing user's email, for example `\"engineer@example.com\"`. If approval is required, also set approved_by to a different eligible user's email, for example `\"approver@example.com\"`.\n\n**Success: 201 Created**\n\nReturns the new job in `data`. Keep `data.id` and use it as the job ID when retrieving, updating, or deleting this job. A job is created with status `open` when an assignee is supplied, or `unassigned` otherwise. The selected template becomes the required template. Assigning a job can notify the assignee.\n\nSending this request again creates another job. Before retrying after an uncertain response, check whether the job was created.\n\n**Errors:** 404 for an unavailable housing provider or published template; 422 for invalid fields, an unavailable property or user, or an invalid approval selection.\n\n### Job response\n\n| Field | Description |\n| --- | --- |\n| id | TC Go job ID. Use it for Get, Update, and Delete job. |\n| housing_provider | Housing provider with ID, name, and address. |\n| templates | Attached templates with ID, name, document type name, and requires_approval. Housing provider details within each template are included only when available. |\n| property | Property details, or null if they cannot be retrieved. The additional property fields can vary with the housing provider's property source. |\n| reference | Your reference, or null. |\n| source | Job source: tc or tcgo. |\n| created_by | User object with id, first_name, last_name, full_name, and email. Jobs created through this API use the API integration user. |\n| assigned_to | Assignee user object, or null. Requests use an email address; responses use a user object. |\n| approved_by | Approver user object, or null. Requests use an email address; responses use a user object. |\n| status | Current job status. |\n| description | Job description, or null. |\n| deadline | Deadline serialized as a date/time string. |\n| appointment_date | Appointment date serialized as a date/time string, or null. |\n| appointment_time | Appointment time in HH:mm:ss, or null. |\n| appointment_period | am, pm, or null. |\n| created_at / updated_at | Creation and last-update timestamps. |\n\nThe public job response does not include a list of documents or their IDs. Use a document ID you already have from your TC Go document records with Get document."},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"message\": \"An approver is required when an assignee is selected.\",\n  \"errors\": {\n    \"approved_by\": [\n      \"An approver is required when an assignee is selected.\"\n    ]\n  }\n}"}],"_postman_id":"bec9b03d-b01f-4b32-93e3-c9271de0925e"},{"name":"Get job","id":"35083158-2ad7-4db6-9d1b-d9f8ce833546","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"{{base_url}}/api/public/v1/jobs/{{job_id}}","description":"<p>Get one job belonging to your service provider.</p>\n<p><strong>Path parameter:</strong> <code>job_id</code> — ID from Create job or List jobs.</p>\n<p><strong>Success: 200 OK</strong></p>\n<p>Returns the job in <code>data</code>.</p>\n<p><strong>Errors:</strong> 404 if the job does not exist, has been deleted, or is unavailable to your service provider.</p>\n<h3 id=\"job-response\">Job response</h3>\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>id</td>\n<td>TC Go job ID. Use it for Get, Update, and Delete job.</td>\n</tr>\n<tr>\n<td>housing_provider</td>\n<td>Housing provider with ID, name, and address.</td>\n</tr>\n<tr>\n<td>templates</td>\n<td>Attached templates with ID, name, document type name, and requires_approval. Housing provider details within each template are included only when available.</td>\n</tr>\n<tr>\n<td>property</td>\n<td>Property details, or null if they cannot be retrieved. The additional property fields can vary with the housing provider's property source.</td>\n</tr>\n<tr>\n<td>reference</td>\n<td>Your reference, or null.</td>\n</tr>\n<tr>\n<td>source</td>\n<td>Job source: tc or tcgo.</td>\n</tr>\n<tr>\n<td>created_by</td>\n<td>User object with id, first_name, last_name, full_name, and email. Jobs created through this API use the API integration user.</td>\n</tr>\n<tr>\n<td>assigned_to</td>\n<td>Assignee user object, or null. Requests use an email address; responses use a user object.</td>\n</tr>\n<tr>\n<td>approved_by</td>\n<td>Approver user object, or null. Requests use an email address; responses use a user object.</td>\n</tr>\n<tr>\n<td>status</td>\n<td>Current job status.</td>\n</tr>\n<tr>\n<td>description</td>\n<td>Job description, or null.</td>\n</tr>\n<tr>\n<td>deadline</td>\n<td>Deadline serialized as a date/time string.</td>\n</tr>\n<tr>\n<td>appointment_date</td>\n<td>Appointment date serialized as a date/time string, or null.</td>\n</tr>\n<tr>\n<td>appointment_time</td>\n<td>Appointment time in HH:mm:ss, or null.</td>\n</tr>\n<tr>\n<td>appointment_period</td>\n<td>am, pm, or null.</td>\n</tr>\n<tr>\n<td>created_at / updated_at</td>\n<td>Creation and last-update timestamps.</td>\n</tr>\n</tbody>\n</table>\n</div><p>The public job response does not include a list of documents or their IDs. Use a document ID you already have from your TC Go document records with Get document.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","type":"collection"}},"urlObject":{"path":["api","public","v1","jobs","{{job_id}}"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[{"id":"eec8b72c-ba25-412e-a499-e1627956dc1c","name":"200 — Job details","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"{{base_url}}/api/public/v1/jobs/{{job_id}}","description":"Get one job belonging to your service provider.\n\n**Path parameter:** `job_id` — ID from Create job or List jobs.\n\n**Success: 200 OK**\n\nReturns the job in `data`.\n\n**Errors:** 404 if the job does not exist, has been deleted, or is unavailable to your service provider.\n\n### Job response\n\n| Field | Description |\n| --- | --- |\n| id | TC Go job ID. Use it for Get, Update, and Delete job. |\n| housing_provider | Housing provider with ID, name, and address. |\n| templates | Attached templates with ID, name, document type name, and requires_approval. Housing provider details within each template are included only when available. |\n| property | Property details, or null if they cannot be retrieved. The additional property fields can vary with the housing provider's property source. |\n| reference | Your reference, or null. |\n| source | Job source: tc or tcgo. |\n| created_by | User object with id, first_name, last_name, full_name, and email. Jobs created through this API use the API integration user. |\n| assigned_to | Assignee user object, or null. Requests use an email address; responses use a user object. |\n| approved_by | Approver user object, or null. Requests use an email address; responses use a user object. |\n| status | Current job status. |\n| description | Job description, or null. |\n| deadline | Deadline serialized as a date/time string. |\n| appointment_date | Appointment date serialized as a date/time string, or null. |\n| appointment_time | Appointment time in HH:mm:ss, or null. |\n| appointment_period | am, pm, or null. |\n| created_at / updated_at | Creation and last-update timestamps. |\n\nThe public job response does not include a list of documents or their IDs. Use a document ID you already have from your TC Go document records with Get document."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"data\": {\n    \"id\": 401,\n    \"housing_provider\": {\n      \"id\": 101,\n      \"name\": \"Example Housing Provider\",\n      \"address\": \"Example address\"\n    },\n    \"templates\": [\n      {\n        \"id\": 201,\n        \"name\": \"Example Inspection\",\n        \"document_type\": \"Example Inspection\",\n        \"requires_approval\": false\n      }\n    ],\n    \"property\": {\n      \"id\": 301,\n      \"uprn\": \"EXAMPLE-UPRN\",\n      \"address_1\": \"Example property address\",\n      \"address_2\": null,\n      \"town\": \"Example town\",\n      \"county\": null,\n      \"postcode\": \"EXAMPLE\",\n      \"live\": true,\n      \"service_provider_id\": 102,\n      \"housing_provider_id\": 101,\n      \"landlord\": null,\n      \"created_at\": \"2030-01-15T09:00:00.000000Z\",\n      \"updated_at\": \"2030-01-15T09:00:00.000000Z\",\n      \"deleted_at\": null,\n      \"property_data\": []\n    },\n    \"reference\": \"EXAMPLE-001\",\n    \"source\": \"tcgo\",\n    \"created_by\": {\n      \"id\": 501,\n      \"first_name\": \"Public\",\n      \"last_name\": \"API\",\n      \"full_name\": \"Public API\",\n      \"email\": \"integration@example.com\"\n    },\n    \"assigned_to\": null,\n    \"approved_by\": null,\n    \"status\": \"unassigned\",\n    \"description\": \"Example inspection job\",\n    \"deadline\": \"2030-01-31T00:00:00.000000Z\",\n    \"appointment_date\": null,\n    \"appointment_time\": null,\n    \"appointment_period\": null,\n    \"created_at\": \"2030-01-15T09:00:00.000000Z\",\n    \"updated_at\": \"2030-01-15T09:00:00.000000Z\"\n  }\n}"}],"_postman_id":"35083158-2ad7-4db6-9d1b-d9f8ce833546"},{"name":"Update job","id":"d97c3fcc-f8a0-421d-994b-ba342508e222","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"reference\": \"EXAMPLE-001-UPDATED\",\n  \"description\": \"Updated example job description\"\n}","options":{"raw":{"language":"json"}}},"url":"{{base_url}}/api/public/v1/jobs/{{job_id}}","description":"<p>Update selected details of a job belonging to your service provider.</p>\n<p><strong>Path parameter:</strong> <code>job_id</code> — ID from Create job or List jobs.</p>\n<p>Send only the fields you want to change. Omitted fields keep their existing values. Send JSON null to clear a nullable field.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body field</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>reference</td>\n<td>No</td>\n<td>String up to 255 characters, or null.</td>\n</tr>\n<tr>\n<td>assigned_to</td>\n<td>No</td>\n<td>Existing eligible user's email, or null to clear the assignee.</td>\n</tr>\n<tr>\n<td>approved_by</td>\n<td>No</td>\n<td>Existing eligible approver's email, or null to clear the approver.</td>\n</tr>\n<tr>\n<td>description</td>\n<td>No</td>\n<td>String, or null.</td>\n</tr>\n<tr>\n<td>deadline</td>\n<td>No</td>\n<td>Date on or after today; use YYYY-MM-DD. This field cannot be cleared with null.</td>\n</tr>\n<tr>\n<td>appointment_date</td>\n<td>No</td>\n<td>Date on or after today, or null; use YYYY-MM-DD.</td>\n</tr>\n<tr>\n<td>appointment_time</td>\n<td>No</td>\n<td>HH:mm:ss, or null.</td>\n</tr>\n<tr>\n<td>appointment_period</td>\n<td>No</td>\n<td>am, pm, or null.</td>\n</tr>\n</tbody>\n</table>\n</div><p>The assignment and approval rules in Create job also apply here. They are checked against the final assignee and approver, including existing values when a field is omitted. An approver must be an eligible admin, and must differ from the assignee if approval is required.</p>\n<p>The example body changes only the reference and description. To change assignment, add <code>\"assigned_to\": \"engineer@example.com\"</code> using an actual eligible user's email. If the required template needs approval, include or retain a different eligible approver.</p>\n<p>Housing provider, property, templates, source, and status cannot be changed through this endpoint. Updating an assignee does not automatically change the job status. Reassignment can notify the new assignee. Setting an approver also moves documents waiting for an approver to the approval stage.</p>\n<p><strong>Success: 200 OK</strong></p>\n<p>Returns the updated job in <code>data</code>.</p>\n<p><strong>Errors:</strong> 404 for an unavailable or deleted job; 422 for invalid fields, an invalid approval selection, or a job without a required template.</p>\n<h3 id=\"job-response\">Job response</h3>\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>id</td>\n<td>TC Go job ID. Use it for Get, Update, and Delete job.</td>\n</tr>\n<tr>\n<td>housing_provider</td>\n<td>Housing provider with ID, name, and address.</td>\n</tr>\n<tr>\n<td>templates</td>\n<td>Attached templates with ID, name, document type name, and requires_approval. Housing provider details within each template are included only when available.</td>\n</tr>\n<tr>\n<td>property</td>\n<td>Property details, or null if they cannot be retrieved. The additional property fields can vary with the housing provider's property source.</td>\n</tr>\n<tr>\n<td>reference</td>\n<td>Your reference, or null.</td>\n</tr>\n<tr>\n<td>source</td>\n<td>Job source: tc or tcgo.</td>\n</tr>\n<tr>\n<td>created_by</td>\n<td>User object with id, first_name, last_name, full_name, and email. Jobs created through this API use the API integration user.</td>\n</tr>\n<tr>\n<td>assigned_to</td>\n<td>Assignee user object, or null. Requests use an email address; responses use a user object.</td>\n</tr>\n<tr>\n<td>approved_by</td>\n<td>Approver user object, or null. Requests use an email address; responses use a user object.</td>\n</tr>\n<tr>\n<td>status</td>\n<td>Current job status.</td>\n</tr>\n<tr>\n<td>description</td>\n<td>Job description, or null.</td>\n</tr>\n<tr>\n<td>deadline</td>\n<td>Deadline serialized as a date/time string.</td>\n</tr>\n<tr>\n<td>appointment_date</td>\n<td>Appointment date serialized as a date/time string, or null.</td>\n</tr>\n<tr>\n<td>appointment_time</td>\n<td>Appointment time in HH:mm:ss, or null.</td>\n</tr>\n<tr>\n<td>appointment_period</td>\n<td>am, pm, or null.</td>\n</tr>\n<tr>\n<td>created_at / updated_at</td>\n<td>Creation and last-update timestamps.</td>\n</tr>\n</tbody>\n</table>\n</div><p>The public job response does not include a list of documents or their IDs. Use a document ID you already have from your TC Go document records with Get document.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","type":"collection"}},"urlObject":{"path":["api","public","v1","jobs","{{job_id}}"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[{"id":"e16cd473-0352-4115-89f7-b85a5064002f","name":"200 — Job updated","originalRequest":{"method":"PATCH","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"reference\": \"EXAMPLE-001-UPDATED\",\n  \"description\": \"Updated example job description\"\n}","options":{"raw":{"language":"json"}}},"url":"{{base_url}}/api/public/v1/jobs/{{job_id}}","description":"Update selected details of a job belonging to your service provider.\n\n**Path parameter:** `job_id` — ID from Create job or List jobs.\n\nSend only the fields you want to change. Omitted fields keep their existing values. Send JSON null to clear a nullable field.\n\n| Body field | Required | Description |\n| --- | --- | --- |\n| reference | No | String up to 255 characters, or null. |\n| assigned_to | No | Existing eligible user's email, or null to clear the assignee. |\n| approved_by | No | Existing eligible approver's email, or null to clear the approver. |\n| description | No | String, or null. |\n| deadline | No | Date on or after today; use YYYY-MM-DD. This field cannot be cleared with null. |\n| appointment_date | No | Date on or after today, or null; use YYYY-MM-DD. |\n| appointment_time | No | HH:mm:ss, or null. |\n| appointment_period | No | am, pm, or null. |\n\nThe assignment and approval rules in Create job also apply here. They are checked against the final assignee and approver, including existing values when a field is omitted. An approver must be an eligible admin, and must differ from the assignee if approval is required.\n\nThe example body changes only the reference and description. To change assignment, add `\"assigned_to\": \"engineer@example.com\"` using an actual eligible user's email. If the required template needs approval, include or retain a different eligible approver.\n\nHousing provider, property, templates, source, and status cannot be changed through this endpoint. Updating an assignee does not automatically change the job status. Reassignment can notify the new assignee. Setting an approver also moves documents waiting for an approver to the approval stage.\n\n**Success: 200 OK**\n\nReturns the updated job in `data`.\n\n**Errors:** 404 for an unavailable or deleted job; 422 for invalid fields, an invalid approval selection, or a job without a required template.\n\n### Job response\n\n| Field | Description |\n| --- | --- |\n| id | TC Go job ID. Use it for Get, Update, and Delete job. |\n| housing_provider | Housing provider with ID, name, and address. |\n| templates | Attached templates with ID, name, document type name, and requires_approval. Housing provider details within each template are included only when available. |\n| property | Property details, or null if they cannot be retrieved. The additional property fields can vary with the housing provider's property source. |\n| reference | Your reference, or null. |\n| source | Job source: tc or tcgo. |\n| created_by | User object with id, first_name, last_name, full_name, and email. Jobs created through this API use the API integration user. |\n| assigned_to | Assignee user object, or null. Requests use an email address; responses use a user object. |\n| approved_by | Approver user object, or null. Requests use an email address; responses use a user object. |\n| status | Current job status. |\n| description | Job description, or null. |\n| deadline | Deadline serialized as a date/time string. |\n| appointment_date | Appointment date serialized as a date/time string, or null. |\n| appointment_time | Appointment time in HH:mm:ss, or null. |\n| appointment_period | am, pm, or null. |\n| created_at / updated_at | Creation and last-update timestamps. |\n\nThe public job response does not include a list of documents or their IDs. Use a document ID you already have from your TC Go document records with Get document."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"data\": {\n    \"id\": 401,\n    \"housing_provider\": {\n      \"id\": 101,\n      \"name\": \"Example Housing Provider\",\n      \"address\": \"Example address\"\n    },\n    \"templates\": [\n      {\n        \"id\": 201,\n        \"name\": \"Example Inspection\",\n        \"document_type\": \"Example Inspection\",\n        \"requires_approval\": false\n      }\n    ],\n    \"property\": {\n      \"id\": 301,\n      \"uprn\": \"EXAMPLE-UPRN\",\n      \"address_1\": \"Example property address\",\n      \"address_2\": null,\n      \"town\": \"Example town\",\n      \"county\": null,\n      \"postcode\": \"EXAMPLE\",\n      \"live\": true,\n      \"service_provider_id\": 102,\n      \"housing_provider_id\": 101,\n      \"landlord\": null,\n      \"created_at\": \"2030-01-15T09:00:00.000000Z\",\n      \"updated_at\": \"2030-01-15T09:00:00.000000Z\",\n      \"deleted_at\": null,\n      \"property_data\": []\n    },\n    \"reference\": \"EXAMPLE-001-UPDATED\",\n    \"source\": \"tcgo\",\n    \"created_by\": {\n      \"id\": 501,\n      \"first_name\": \"Public\",\n      \"last_name\": \"API\",\n      \"full_name\": \"Public API\",\n      \"email\": \"integration@example.com\"\n    },\n    \"assigned_to\": null,\n    \"approved_by\": null,\n    \"status\": \"unassigned\",\n    \"description\": \"Updated example job description\",\n    \"deadline\": \"2030-01-31T00:00:00.000000Z\",\n    \"appointment_date\": null,\n    \"appointment_time\": null,\n    \"appointment_period\": null,\n    \"created_at\": \"2030-01-15T09:00:00.000000Z\",\n    \"updated_at\": \"2030-01-15T10:00:00.000000Z\"\n  }\n}"}],"_postman_id":"d97c3fcc-f8a0-421d-994b-ba342508e222"},{"name":"Delete job","id":"ac086d04-d12b-4a46-808d-7763bb042224","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"{{base_url}}/api/public/v1/jobs/{{job_id}}","description":"<p>Delete an existing job belonging to your service provider.</p>\n<p><strong>Path parameter:</strong> <code>job_id</code> — the specific job to delete. Review this ID before sending.</p>\n<p>Deletion is allowed only when the current status is <code>unassigned</code> or <code>open</code>. The deleted job will no longer be available through Get job or List jobs.</p>\n<p><strong>Body:</strong> none.</p>\n<p><strong>Success: 200 OK</strong></p>\n<p>Returns a <code>message</code> confirming the deleted job ID. This endpoint returns JSON, rather than a 204 response.</p>\n<p><strong>Errors:</strong> 404 for an unavailable or already-deleted job; 422 if the current status does not allow deletion.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","type":"collection"}},"urlObject":{"path":["api","public","v1","jobs","{{job_id}}"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[{"id":"e30814bd-8eb2-4412-bf35-1906a7041e77","name":"200 — Job deleted","originalRequest":{"method":"DELETE","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"{{base_url}}/api/public/v1/jobs/{{job_id}}","description":"Delete an existing job belonging to your service provider.\n\n**Path parameter:** `job_id` — the specific job to delete. Review this ID before sending.\n\nDeletion is allowed only when the current status is `unassigned` or `open`. The deleted job will no longer be available through Get job or List jobs.\n\n**Body:** none.\n\n**Success: 200 OK**\n\nReturns a `message` confirming the deleted job ID. This endpoint returns JSON, rather than a 204 response.\n\n**Errors:** 404 for an unavailable or already-deleted job; 422 if the current status does not allow deletion."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"message\": \"Job ID: 401 successfully deleted.\"\n}"},{"id":"09eaafe8-09ee-4779-beee-816bf7b13b35","name":"422 — Job cannot be deleted in its current status","originalRequest":{"method":"DELETE","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"{{base_url}}/api/public/v1/jobs/{{job_id}}","description":"Delete an existing job belonging to your service provider.\n\n**Path parameter:** `job_id` — the specific job to delete. Review this ID before sending.\n\nDeletion is allowed only when the current status is `unassigned` or `open`. The deleted job will no longer be available through Get job or List jobs.\n\n**Body:** none.\n\n**Success: 200 OK**\n\nReturns a `message` confirming the deleted job ID. This endpoint returns JSON, rather than a 204 response.\n\n**Errors:** 404 for an unavailable or already-deleted job; 422 if the current status does not allow deletion."},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"message\": \"Cannot delete job with status of in_progress.\"\n}"}],"_postman_id":"ac086d04-d12b-4a46-808d-7763bb042224"}],"id":"ef3e7bf6-b3e1-4a94-b2f6-aa3dbb5aa79c","description":"<p>List, create, retrieve, update, and delete jobs. Read the assignment/approval rules in Create job before assigning a user.</p>\n","_postman_id":"ef3e7bf6-b3e1-4a94-b2f6-aa3dbb5aa79c","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","type":"collection"}}},{"name":"04 · Templates","item":[{"name":"List published templates","id":"081dc64a-53ee-4eee-85c9-da57462c2ec4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"{{base_url}}/api/public/v1/templates?housing_provider_id={{housing_provider_id}}","description":"<p>List published templates available to your service provider, ordered by name.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Query parameter</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>housing_provider_id</td>\n<td>No</td>\n<td>Integer. Filter templates to a housing provider. Omit this parameter to list all available published templates.</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Success: 200 OK</strong></p>\n<p>Returns <code>data</code> as an array containing <code>id</code>, <code>name</code>, <code>housing_provider</code> (ID and name, or null), <code>document_type</code> (name, or null), and boolean <code>requires_approval</code>. This endpoint is not paginated.</p>\n<p>Use a template ID from this response when creating a job. The template must belong to the same housing provider as the job. Check <code>requires_approval</code> before choosing an assignee and approver.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","type":"collection"}},"urlObject":{"path":["api","public","v1","templates"],"host":["{{base_url}}"],"query":[{"description":{"content":"<p>Optional. Restrict results to this housing provider.</p>\n","type":"text/plain"},"key":"housing_provider_id","value":"{{housing_provider_id}}"}],"variable":[]}},"response":[{"id":"e556ee2e-9940-489e-b70e-13f66d15116f","name":"200 — Published templates","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"{{base_url}}/api/public/v1/templates?housing_provider_id={{housing_provider_id}}","host":["{{base_url}}"],"path":["api","public","v1","templates"],"query":[{"key":"housing_provider_id","value":"{{housing_provider_id}}","description":"Optional. Restrict results to this housing provider."}]},"description":"List published templates available to your service provider, ordered by name.\n\n| Query parameter | Required | Description |\n| --- | --- | --- |\n| housing_provider_id | No | Integer. Filter templates to a housing provider. Omit this parameter to list all available published templates. |\n\n**Success: 200 OK**\n\nReturns `data` as an array containing `id`, `name`, `housing_provider` (ID and name, or null), `document_type` (name, or null), and boolean `requires_approval`. This endpoint is not paginated.\n\nUse a template ID from this response when creating a job. The template must belong to the same housing provider as the job. Check `requires_approval` before choosing an assignee and approver."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"data\": [\n    {\n      \"id\": 201,\n      \"name\": \"Example Inspection\",\n      \"housing_provider\": {\n        \"id\": 101,\n        \"name\": \"Example Housing Provider\"\n      },\n      \"document_type\": \"Example Inspection\",\n      \"requires_approval\": false\n    }\n  ]\n}"}],"_postman_id":"081dc64a-53ee-4eee-85c9-da57462c2ec4"}],"id":"bc83fe0c-40a9-42d2-911f-f917762b3478","description":"<p>Choose a published template and check whether approval is required.</p>\n","_postman_id":"bc83fe0c-40a9-42d2-911f-f917762b3478","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","id":"c5101c2d-2eb5-4e8f-a77a-d2959a817592","name":"TCGo Public API","type":"collection"}}}],"auth":{"type":"bearer","bearer":{"basicConfig":[]}},"event":[{"listen":"prerequest","script":{"id":"c9176453-21c3-4f77-8101-2421058a87a9","type":"text/javascript","packages":{},"exec":[""]}},{"listen":"test","script":{"id":"7baf7fb7-eccd-46d4-8054-6b3ec968eb36","type":"text/javascript","packages":{},"exec":[""]}}]}