{
  "info": {
    "_postman_id": "59b6e897-3aef-4865-b129-5b2faa60c180",
    "name": "PersivApps External API",
    "description": "Run \"Sign in\" first: it stores the access token for every other request. Set client_secret in the collection variables (never share a file with it filled in). Tokens last 1 hour.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{access_token}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://your-host/persivapps/service"
    },
    {
      "key": "client_id",
      "value": ""
    },
    {
      "key": "client_secret",
      "value": ""
    },
    {
      "key": "access_token",
      "value": ""
    },
    {
      "key": "refresh_token",
      "value": ""
    }
  ],
  "item": [
    {
      "name": "Getting started",
      "item": [
        {
          "name": "Sign in with the client ID and secret; returns an access token (1 hour) and a refresh token",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/auth/login",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "auth",
                "login"
              ],
              "variable": [],
              "query": []
            },
            "description": "Sign in with the client ID and secret; returns an access token (1 hour) and a refresh token.\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `client_id` | body | string | yes | The client ID |\n| `client_secret` | body | string | yes | The secret (or send both as HTTP Basic) |\n| `scope` | body | string | no | Space-separated permissions, to get a token with fewer |\n\nErrors follow OAuth 2.0: {\"error\": \"invalid_client\" | \"invalid_scope\", \"error_description\": \"…\"}.",
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"client_id\": \"{{client_id}}\",\n  \"client_secret\": \"{{client_secret}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/auth/login",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "auth",
                    "login"
                  ],
                  "variable": [],
                  "query": []
                },
                "description": "Sign in with the client ID and secret; returns an access token (1 hour) and a refresh token.\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `client_id` | body | string | yes | The client ID |\n| `client_secret` | body | string | yes | The secret (or send both as HTTP Basic) |\n| `scope` | body | string | no | Space-separated permissions, to get a token with fewer |\n\nErrors follow OAuth 2.0: {\"error\": \"invalid_client\" | \"invalid_scope\", \"error_description\": \"…\"}.",
                "auth": {
                  "type": "noauth"
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"client_id\": \"{{client_id}}\",\n  \"client_secret\": \"{{client_secret}}\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"access_token\": \"pvx_at_9c1f…\",\n  \"token_type\": \"Bearer\",\n  \"expires_in\": 3600,\n  \"scope\": \"entries:read entries:write\",\n  \"refresh_token\": \"pvx_rt_47d2…\"\n}"
            }
          ],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const body = pm.response.json();",
                  "if (body.access_token) { pm.collectionVariables.set('access_token', body.access_token); }",
                  "if (body.refresh_token) { pm.collectionVariables.set('refresh_token', body.refresh_token); }"
                ]
              }
            }
          ]
        },
        {
          "name": "OAuth 2.0 token endpoint: client_credentials, or refresh_token to renew",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/auth/token",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "auth",
                "token"
              ],
              "variable": [],
              "query": []
            },
            "description": "OAuth 2.0 token endpoint: client_credentials, or refresh_token to renew.\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `grant_type` | body | string | yes | client_credentials or refresh_token |\n| `refresh_token` | body | string | no | With refresh_token; each works once |\n| `client_id` | body | string | yes | The client ID |\n| `client_secret` | body | string | yes | The secret |",
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"grant_type\": \"refresh_token\",\n  \"refresh_token\": \"{{refresh_token}}\",\n  \"client_id\": \"{{client_id}}\",\n  \"client_secret\": \"{{client_secret}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/auth/token",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "auth",
                    "token"
                  ],
                  "variable": [],
                  "query": []
                },
                "description": "OAuth 2.0 token endpoint: client_credentials, or refresh_token to renew.\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `grant_type` | body | string | yes | client_credentials or refresh_token |\n| `refresh_token` | body | string | no | With refresh_token; each works once |\n| `client_id` | body | string | yes | The client ID |\n| `client_secret` | body | string | yes | The secret |",
                "auth": {
                  "type": "noauth"
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"grant_type\": \"refresh_token\",\n  \"refresh_token\": \"{{refresh_token}}\",\n  \"client_id\": \"{{client_id}}\",\n  \"client_secret\": \"{{client_secret}}\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"access_token\": \"pvx_at_5be0…\",\n  \"token_type\": \"Bearer\",\n  \"expires_in\": 3600,\n  \"scope\": \"entries:read entries:write\",\n  \"refresh_token\": \"pvx_rt_a812…\"\n}"
            }
          ]
        },
        {
          "name": "This client, the permissions of the current token, and the SmartTables each covers",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/me",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "me"
              ],
              "variable": [],
              "query": []
            },
            "description": "This client, the permissions of the current token, and the SmartTables each covers.\n\nUse it to check what a token can do before calling anything else."
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/me",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "me"
                  ],
                  "variable": [],
                  "query": []
                },
                "description": "This client, the permissions of the current token, and the SmartTables each covers.\n\nUse it to check what a token can do before calling anything else."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"client\": {\n    \"name\": \"Acme Logistics\",\n    \"client_id\": \"ext.acme-logistics.1a2b3c4d\"\n  },\n  \"credential\": {\n    \"name\": \"Production server\",\n    \"expires_at\": null\n  },\n  \"permissions\": [\n    {\n      \"permission\": \"entries:read\",\n      \"smarttables\": [\n        {\n          \"id\": 61,\n          \"name\": \"Dispatch Log\"\n        }\n      ]\n    },\n    {\n      \"permission\": \"entries:write\",\n      \"smarttables\": [\n        {\n          \"id\": 61,\n          \"name\": \"Dispatch Log\"\n        }\n      ]\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "A Postman collection of just the calls this token may use (?base_url= sets the default host)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/reference/postman?base_url=https%3A%2F%2Fyour-host%2Fpersivapps%2Fservice",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "reference",
                "postman"
              ],
              "variable": [],
              "query": [
                {
                  "key": "base_url",
                  "value": "https://your-host/persivapps/service"
                }
              ]
            },
            "description": "A Postman collection of just the calls this token may use (?base_url= sets the default host).\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `base_url` | query | string | no | Your API base URL, set as the collection's base_url variable |\n\nImport the file in Postman, fill in client_secret, then run \"Sign in\"."
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/reference/postman?base_url=https%3A%2F%2Fyour-host%2Fpersivapps%2Fservice",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "reference",
                    "postman"
                  ],
                  "variable": [],
                  "query": [
                    {
                      "key": "base_url",
                      "value": "https://your-host/persivapps/service"
                    }
                  ]
                },
                "description": "A Postman collection of just the calls this token may use (?base_url= sets the default host).\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `base_url` | query | string | no | Your API base URL, set as the collection's base_url variable |\n\nImport the file in Postman, fill in client_secret, then run \"Sign in\"."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "text",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "(binary file)"
            }
          ]
        },
        {
          "name": "The API reference as a PDF, with just the calls this token may use",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/reference/pdf?base_url=https%3A%2F%2Fyour-host%2Fpersivapps%2Fservice",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "reference",
                "pdf"
              ],
              "variable": [],
              "query": [
                {
                  "key": "base_url",
                  "value": "https://your-host/persivapps/service"
                }
              ]
            },
            "description": "The API reference as a PDF, with just the calls this token may use.\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `base_url` | query | string | no | Your API base URL, shown in the samples |\n\nAt most 10 per 10 minutes."
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/reference/pdf?base_url=https%3A%2F%2Fyour-host%2Fpersivapps%2Fservice",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "reference",
                    "pdf"
                  ],
                  "variable": [],
                  "query": [
                    {
                      "key": "base_url",
                      "value": "https://your-host/persivapps/service"
                    }
                  ]
                },
                "description": "The API reference as a PDF, with just the calls this token may use.\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `base_url` | query | string | no | Your API base URL, shown in the samples |\n\nAt most 10 per 10 minutes."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "text",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/pdf"
                }
              ],
              "body": "(binary file)"
            }
          ]
        }
      ]
    },
    {
      "name": "Entries",
      "item": [
        {
          "name": "List entries of a SmartTable (paged; search, filters, sort, created/updated time window)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/entries?page=1&page_size=100&updated_after=2026-10-01T00%3A00%3A00Z&sort=updated_at&dir=asc",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "entries"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": [
                {
                  "key": "page",
                  "value": "1"
                },
                {
                  "key": "page_size",
                  "value": "100"
                },
                {
                  "key": "updated_after",
                  "value": "2026-10-01T00:00:00Z"
                },
                {
                  "key": "sort",
                  "value": "updated_at"
                },
                {
                  "key": "dir",
                  "value": "asc"
                }
              ]
            },
            "description": "List entries of a SmartTable (paged; search, filters, sort, created/updated time window).\n\n**Permission:** `entries:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `page` | query | integer | no | Page, from 1 |\n| `page_size` | query | integer | no | 50, 100 (default), 200 or 500 |\n| `search` | query | string | no | Matches any field's value |\n| `filters` | query | JSON array | no | e.g. [{\"column_id\": \"8\", \"operator\": \"equals\", \"value\": \"Arrived\"}]; at most 20 |\n| `sort` | query | string | no | A field id, or created_at, updated_at, observation_number, entry_id |\n| `dir` | query | string | no | asc or desc (default) |\n| `submitted` | query | string | no | 1 = submitted only, 0 = drafts only |\n| `created_after` | query | ISO 8601 | no | Created at or after (no offset = UTC) |\n| `created_before` | query | ISO 8601 | no | Created before |\n| `updated_after` | query | ISO 8601 | no | Changed at or after — use it to fetch what changed since your last run |\n| `updated_before` | query | ISO 8601 | no | Changed before |\n| `deleted` | query | string | no | 1 lists deleted rows instead (needs entries:delete) |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/entries?page=1&page_size=100&updated_after=2026-10-01T00%3A00%3A00Z&sort=updated_at&dir=asc",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "entries"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "page_size",
                      "value": "100"
                    },
                    {
                      "key": "updated_after",
                      "value": "2026-10-01T00:00:00Z"
                    },
                    {
                      "key": "sort",
                      "value": "updated_at"
                    },
                    {
                      "key": "dir",
                      "value": "asc"
                    }
                  ]
                },
                "description": "List entries of a SmartTable (paged; search, filters, sort, created/updated time window).\n\n**Permission:** `entries:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `page` | query | integer | no | Page, from 1 |\n| `page_size` | query | integer | no | 50, 100 (default), 200 or 500 |\n| `search` | query | string | no | Matches any field's value |\n| `filters` | query | JSON array | no | e.g. [{\"column_id\": \"8\", \"operator\": \"equals\", \"value\": \"Arrived\"}]; at most 20 |\n| `sort` | query | string | no | A field id, or created_at, updated_at, observation_number, entry_id |\n| `dir` | query | string | no | asc or desc (default) |\n| `submitted` | query | string | no | 1 = submitted only, 0 = drafts only |\n| `created_after` | query | ISO 8601 | no | Created at or after (no offset = UTC) |\n| `created_before` | query | ISO 8601 | no | Created before |\n| `updated_after` | query | ISO 8601 | no | Changed at or after — use it to fetch what changed since your last run |\n| `updated_before` | query | ISO 8601 | no | Changed before |\n| `deleted` | query | string | no | 1 lists deleted rows instead (needs entries:delete) |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"entries\": [\n    {\n      \"smarttable_id\": 61,\n      \"smarttable_data_id\": 189862,\n      \"smarttable_data_entry_id\": 195569,\n      \"observation_number\": 1,\n      \"values\": {\n        \"1\": \"Truck MH12AB1234\",\n        \"3\": 12.5,\n        \"8\": \"Arrived\"\n      },\n      \"is_submitted\": false,\n      \"is_deleted\": false,\n      \"created_at\": \"2026-10-12T09:41:07.512Z\",\n      \"updated_at\": \"2026-10-12T09:41:07.512Z\",\n      \"created_by\": \"Acme Logistics (integration)\"\n    }\n  ],\n  \"page\": 1,\n  \"page_size\": 100,\n  \"total_count\": 1,\n  \"total_pages\": 1\n}"
            }
          ]
        },
        {
          "name": "Read one row (an observation of an entry)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                }
              ],
              "query": []
            },
            "description": "Read one row (an observation of an entry).\n\n**Permission:** `entries:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    }
                  ],
                  "query": []
                },
                "description": "Read one row (an observation of an entry).\n\n**Permission:** `entries:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"row\": {\n    \"smarttable_id\": 61,\n    \"smarttable_data_id\": 189862,\n    \"smarttable_data_entry_id\": 195569,\n    \"observation_number\": 1,\n    \"values\": {\n      \"1\": \"Truck MH12AB1234\",\n      \"3\": 12.5,\n      \"8\": \"Arrived\"\n    },\n    \"is_submitted\": false,\n    \"is_deleted\": false,\n    \"created_at\": \"2026-10-12T09:41:07.512Z\",\n    \"updated_at\": \"2026-10-12T09:41:07.512Z\",\n    \"created_by\": \"Acme Logistics (integration)\"\n  }\n}"
            }
          ]
        },
        {
          "name": "Read an entry with all its observations",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/entries/:smarttable_data_entry_id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "entries",
                ":smarttable_data_entry_id"
              ],
              "variable": [
                {
                  "key": "smarttable_data_entry_id",
                  "value": "195569"
                }
              ],
              "query": []
            },
            "description": "Read an entry with all its observations.\n\n**Permission:** `entries:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_entry_id` | path | integer | yes | An entry id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/entries/:smarttable_data_entry_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "entries",
                    ":smarttable_data_entry_id"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_entry_id",
                      "value": "195569"
                    }
                  ],
                  "query": []
                },
                "description": "Read an entry with all its observations.\n\n**Permission:** `entries:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_entry_id` | path | integer | yes | An entry id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"smarttable_data_entry_id\": 195569,\n  \"observations\": [\n    {\n      \"smarttable_id\": 61,\n      \"smarttable_data_id\": 189862,\n      \"smarttable_data_entry_id\": 195569,\n      \"observation_number\": 1,\n      \"values\": {\n        \"1\": \"Truck MH12AB1234\",\n        \"3\": 12.5,\n        \"8\": \"Arrived\"\n      },\n      \"is_submitted\": false,\n      \"is_deleted\": false,\n      \"created_at\": \"2026-10-12T09:41:07.512Z\",\n      \"updated_at\": \"2026-10-12T09:41:07.512Z\",\n      \"created_by\": \"Acme Logistics (integration)\"\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Delete a row (soft delete; can be restored)",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                }
              ],
              "query": []
            },
            "description": "Delete a row (soft delete; can be restored).\n\n**Permission:** `entries:delete`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    }
                  ],
                  "query": []
                },
                "description": "Delete a row (soft delete; can be restored).\n\n**Permission:** `entries:delete`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Deleted\",\n  \"smarttable_data_id\": 189862\n}"
            }
          ]
        },
        {
          "name": "Restore a deleted row",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/restore",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id",
                "restore"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                }
              ],
              "query": []
            },
            "description": "Restore a deleted row.\n\n**Permission:** `entries:delete`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/restore",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id",
                    "restore"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    }
                  ],
                  "query": []
                },
                "description": "Restore a deleted row.\n\n**Permission:** `entries:delete`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Restored\",\n  \"smarttable_data_id\": 189862\n}"
            }
          ]
        },
        {
          "name": "Delete a row permanently (cannot be undone)",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/permanent",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id",
                "permanent"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                }
              ],
              "query": []
            },
            "description": "Delete a row permanently (cannot be undone).\n\n**Permission:** `entries:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/permanent",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id",
                    "permanent"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    }
                  ],
                  "query": []
                },
                "description": "Delete a row permanently (cannot be undone).\n\n**Permission:** `entries:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Deleted permanently\",\n  \"smarttable_data_id\": 189862\n}"
            }
          ]
        },
        {
          "name": "Unsubmit a submitted row so it can be edited again",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/unsubmit",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id",
                "unsubmit"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                }
              ],
              "query": []
            },
            "description": "Unsubmit a submitted row so it can be edited again.\n\n**Permission:** `entries:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/unsubmit",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id",
                    "unsubmit"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    }
                  ],
                  "query": []
                },
                "description": "Unsubmit a submitted row so it can be edited again.\n\n**Permission:** `entries:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Unsubmitted\",\n  \"smarttable_data_id\": 189862\n}"
            }
          ]
        },
        {
          "name": "Release the edit lock on a row someone left open",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/release-lock",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id",
                "release-lock"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                }
              ],
              "query": []
            },
            "description": "Release the edit lock on a row someone left open.\n\n**Permission:** `entries:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/release-lock",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id",
                    "release-lock"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    }
                  ],
                  "query": []
                },
                "description": "Release the edit lock on a row someone left open.\n\n**Permission:** `entries:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Edit lock released\",\n  \"smarttable_data_id\": 189862\n}"
            }
          ]
        },
        {
          "name": "Create an entry, or a new observation of an entry this client owns",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/save",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                "save"
              ],
              "variable": [],
              "query": []
            },
            "description": "Create an entry, or a new observation of an entry this client owns.\n\n**Permission:** `entries:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | body | integer | yes | The SmartTable to save into |\n| `smarttable_values` | body | object | yes | Field values keyed by field id; a table field takes an array |\n| `is_submit` | body | boolean | no | true submits (and starts any approval workflow); default saves a draft |\n| `client_op_id` | body | string | no | Your unique id for this save; a repeat returns the original row (200, duplicate: true) |\n| `smarttable_data_entry_id` | body | integer | no | Add a new observation to one of your entries instead |\n| `observation_number` | body | integer | no | With smarttable_data_entry_id: which observation |\n| `attachments__<field_id>` | form | file | no | Files, when sent as multipart/form-data (smarttable_values as a JSON string) |\n\nRequired fields are checked by the entry form, not by the save: send every field the SmartTable needs.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"smarttable_id\": 61,\n  \"smarttable_values\": {\n    \"1\": \"Truck MH12AB1234\",\n    \"3\": 12.5,\n    \"8\": \"Arrived\"\n  },\n  \"is_submit\": false,\n  \"client_op_id\": \"acme-dispatch-000123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/save",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    "save"
                  ],
                  "variable": [],
                  "query": []
                },
                "description": "Create an entry, or a new observation of an entry this client owns.\n\n**Permission:** `entries:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | body | integer | yes | The SmartTable to save into |\n| `smarttable_values` | body | object | yes | Field values keyed by field id; a table field takes an array |\n| `is_submit` | body | boolean | no | true submits (and starts any approval workflow); default saves a draft |\n| `client_op_id` | body | string | no | Your unique id for this save; a repeat returns the original row (200, duplicate: true) |\n| `smarttable_data_entry_id` | body | integer | no | Add a new observation to one of your entries instead |\n| `observation_number` | body | integer | no | With smarttable_data_entry_id: which observation |\n| `attachments__<field_id>` | form | file | no | Files, when sent as multipart/form-data (smarttable_values as a JSON string) |\n\nRequired fields are checked by the entry form, not by the save: send every field the SmartTable needs.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"smarttable_id\": 61,\n  \"smarttable_values\": {\n    \"1\": \"Truck MH12AB1234\",\n    \"3\": 12.5,\n    \"8\": \"Arrived\"\n  },\n  \"is_submit\": false,\n  \"client_op_id\": \"acme-dispatch-000123\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Saved\",\n  \"duplicate\": false,\n  \"smarttable_id\": 61,\n  \"smarttable_data_id\": 189862,\n  \"smarttable_data_entry_id\": 195569,\n  \"observation_number\": 1\n}"
            }
          ]
        },
        {
          "name": "Update fields of a saved row",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/update",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id",
                "update"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                }
              ],
              "query": []
            },
            "description": "Update fields of a saved row.\n\n**Permission:** `entries:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n| `smarttable_values` | body | object | yes | Only the fields to change; the rest keep their values |\n| `cleared_fields` | body | array of string | no | Field ids to blank (an empty string means \"no change\") |\n| `cleared_attachments` | body | array of string | no | Attachment field ids to empty |\n| `is_submit` | body | boolean | no | true submits a draft |\n\nPUT, PATCH and POST are all accepted. Only rows this client created, unless it may change any entry.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"smarttable_values\": {\n    \"8\": \"Unloaded\"\n  },\n  \"cleared_fields\": [\n    \"3\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/update",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id",
                    "update"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    }
                  ],
                  "query": []
                },
                "description": "Update fields of a saved row.\n\n**Permission:** `entries:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n| `smarttable_values` | body | object | yes | Only the fields to change; the rest keep their values |\n| `cleared_fields` | body | array of string | no | Field ids to blank (an empty string means \"no change\") |\n| `cleared_attachments` | body | array of string | no | Attachment field ids to empty |\n| `is_submit` | body | boolean | no | true submits a draft |\n\nPUT, PATCH and POST are all accepted. Only rows this client created, unless it may change any entry.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"smarttable_values\": {\n    \"8\": \"Unloaded\"\n  },\n  \"cleared_fields\": [\n    \"3\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Updated\",\n  \"smarttable_id\": 61,\n  \"smarttable_data_id\": 189862,\n  \"smarttable_data_entry_id\": 195569,\n  \"observation_number\": 1\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Bulk operations",
      "item": [
        {
          "name": "Delete many rows (soft delete; can be restored). Body: {\"smarttable_data_ids\": [...]}",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/bulk/delete",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "bulk",
                "delete"
              ],
              "variable": [],
              "query": []
            },
            "description": "Delete many rows (soft delete; can be restored). Body: {\"smarttable_data_ids\": [...]}.\n\n**Permission:** `entries.bulk:delete`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_ids` | body | array of integer | yes | Row ids, at most 500 |",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"smarttable_data_ids\": [\n    189862,\n    189863,\n    999999\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/bulk/delete",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "bulk",
                    "delete"
                  ],
                  "variable": [],
                  "query": []
                },
                "description": "Delete many rows (soft delete; can be restored). Body: {\"smarttable_data_ids\": [...]}.\n\n**Permission:** `entries.bulk:delete`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_ids` | body | array of integer | yes | Row ids, at most 500 |",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"smarttable_data_ids\": [\n    189862,\n    189863,\n    999999\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"deleted\": [\n    189862,\n    189863\n  ],\n  \"failed\": [\n    {\n      \"id\": 999999,\n      \"error\": \"Not found\"\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Restore many deleted rows. Body: {\"smarttable_data_ids\": [...]}",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/bulk/restore",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "bulk",
                "restore"
              ],
              "variable": [],
              "query": []
            },
            "description": "Restore many deleted rows. Body: {\"smarttable_data_ids\": [...]}.\n\n**Permission:** `entries.bulk:delete`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_ids` | body | array of integer | yes | Row ids, at most 500 |",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"smarttable_data_ids\": [\n    189862,\n    189863\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/bulk/restore",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "bulk",
                    "restore"
                  ],
                  "variable": [],
                  "query": []
                },
                "description": "Restore many deleted rows. Body: {\"smarttable_data_ids\": [...]}.\n\n**Permission:** `entries.bulk:delete`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_ids` | body | array of integer | yes | Row ids, at most 500 |",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"smarttable_data_ids\": [\n    189862,\n    189863\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"restored\": [\n    189862,\n    189863\n  ],\n  \"failed\": []\n}"
            }
          ]
        },
        {
          "name": "Permanently delete many rows (cannot be undone). Body: {\"smarttable_data_ids\": [...]}",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/bulk/delete-permanently",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "bulk",
                "delete-permanently"
              ],
              "variable": [],
              "query": []
            },
            "description": "Permanently delete many rows (cannot be undone). Body: {\"smarttable_data_ids\": [...]}.\n\n**Permission:** `entries.bulk:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_ids` | body | array of integer | yes | Row ids, at most 500 |",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"smarttable_data_ids\": [\n    189862\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/bulk/delete-permanently",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "bulk",
                    "delete-permanently"
                  ],
                  "variable": [],
                  "query": []
                },
                "description": "Permanently delete many rows (cannot be undone). Body: {\"smarttable_data_ids\": [...]}.\n\n**Permission:** `entries.bulk:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_ids` | body | array of integer | yes | Row ids, at most 500 |",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"smarttable_data_ids\": [\n    189862\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"deleted\": [\n    189862\n  ],\n  \"failed\": []\n}"
            }
          ]
        },
        {
          "name": "Move many rows to the latest approved schema and/or display version. Body: {\"smarttable_data_ids\": [...], \"update\": \"entry\" | \"display\" | \"both\"}",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/bulk/update-version",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "bulk",
                "update-version"
              ],
              "variable": [],
              "query": []
            },
            "description": "Move many rows to the latest approved schema and/or display version. Body: {\"smarttable_data_ids\": [...], \"update\": \"entry\" | \"display\" | \"both\"}.\n\n**Permission:** `entries.bulk:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_ids` | body | array of integer | yes | Row ids, at most 500 |\n| `update` | body | string | no | entry, display or both (default) |",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"smarttable_data_ids\": [\n    189862\n  ],\n  \"update\": \"both\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/bulk/update-version",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "bulk",
                    "update-version"
                  ],
                  "variable": [],
                  "query": []
                },
                "description": "Move many rows to the latest approved schema and/or display version. Body: {\"smarttable_data_ids\": [...], \"update\": \"entry\" | \"display\" | \"both\"}.\n\n**Permission:** `entries.bulk:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_ids` | body | array of integer | yes | Row ids, at most 500 |\n| `update` | body | string | no | entry, display or both (default) |",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"smarttable_data_ids\": [\n    189862\n  ],\n  \"update\": \"both\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"updated\": [\n    {\n      \"id\": 189862,\n      \"entry_version_id\": 412,\n      \"display_version_id\": 233\n    }\n  ],\n  \"failed\": []\n}"
            }
          ]
        },
        {
          "name": "Add rows to a relational SmartTable from an Excel file (multipart, key \"file\"; column headers = field names)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/bulk-upload",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "bulk-upload"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "64"
                }
              ],
              "query": []
            },
            "description": "Add rows to a relational SmartTable from an Excel file (multipart, key \"file\"; column headers = field names).\n\n**Permission:** `entries.bulk:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `file` | form | file | yes | .xlsx or .xls, at most 10 MB; first row = field names |\n\nRelational SmartTables only. At most 10 uploads per hour.",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "src": []
                }
              ]
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/bulk-upload",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "bulk-upload"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "64"
                    }
                  ],
                  "query": []
                },
                "description": "Add rows to a relational SmartTable from an Excel file (multipart, key \"file\"; column headers = field names).\n\n**Permission:** `entries.bulk:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `file` | form | file | yes | .xlsx or .xls, at most 10 MB; first row = field names |\n\nRelational SmartTables only. At most 10 uploads per hour.",
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "key": "file",
                      "type": "file",
                      "src": []
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 64,\n  \"message\": \"Bulk upload completed\",\n  \"total_rows\": 120,\n  \"added\": 118,\n  \"failed\": 2,\n  \"errors\": [\n    \"Row 14: Vehicle number is required\",\n    \"Row 87: duplicate Vehicle number\"\n  ]\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Attestation and eSign",
      "item": [
        {
          "name": "A row's attestation and eSign status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/attestation",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id",
                "attestation"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                }
              ],
              "query": []
            },
            "description": "A row's attestation and eSign status.\n\n**Permission:** `entries.attestation:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n\nattested_by is null while the row is not attested."
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/attestation",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id",
                    "attestation"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    }
                  ],
                  "query": []
                },
                "description": "A row's attestation and eSign status.\n\n**Permission:** `entries.attestation:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n\nattested_by is null while the row is not attested."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"attestation\": {\n    \"smarttable_data_id\": 189862,\n    \"attested\": true,\n    \"attested_by\": {\n      \"user_id\": 431,\n      \"name\": \"Acme Logistics (integration)\"\n    },\n    \"esign\": {\n      \"status\": null,\n      \"transaction_id\": null\n    }\n  }\n}"
            }
          ]
        },
        {
          "name": "Attest a row with a signature image; it is recorded as signed by this integration",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/attestation",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id",
                "attestation"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                }
              ],
              "query": []
            },
            "description": "Attest a row with a signature image; it is recorded as signed by this integration.\n\n**Permission:** `entries.attestation:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n| `image` | body | string (base64) or file | yes | PNG or JPEG signature, at most 1 MB; or multipart field \"image\" |\n\nOnly a submitted row. Recorded as signed by this integration.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"image\": \"iVBORw0KGgoAAAANSUhEUgAA...\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/attestation",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id",
                    "attestation"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    }
                  ],
                  "query": []
                },
                "description": "Attest a row with a signature image; it is recorded as signed by this integration.\n\n**Permission:** `entries.attestation:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n| `image` | body | string (base64) or file | yes | PNG or JPEG signature, at most 1 MB; or multipart field \"image\" |\n\nOnly a submitted row. Recorded as signed by this integration.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"image\": \"iVBORw0KGgoAAAANSUhEUgAA...\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"attestation\": {\n    \"smarttable_data_id\": 189862,\n    \"attested\": true,\n    \"attested_by\": {\n      \"user_id\": 431,\n      \"name\": \"Acme Logistics (integration)\"\n    },\n    \"esign\": {\n      \"status\": null,\n      \"transaction_id\": null\n    }\n  }\n}"
            }
          ]
        },
        {
          "name": "Remove a row's attestation",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/attestation",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id",
                "attestation"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                }
              ],
              "query": []
            },
            "description": "Remove a row's attestation.\n\n**Permission:** `entries.attestation:delete`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/attestation",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id",
                    "attestation"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    }
                  ],
                  "query": []
                },
                "description": "Remove a row's attestation.\n\n**Permission:** `entries.attestation:delete`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"attestation\": {\n    \"smarttable_data_id\": 189862,\n    \"attested\": false,\n    \"attested_by\": null,\n    \"esign\": {\n      \"status\": null,\n      \"transaction_id\": null\n    }\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Attachments",
      "item": [
        {
          "name": "List a row's attachments",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/attachments",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id",
                "attachments"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                }
              ],
              "query": []
            },
            "description": "List a row's attachments.\n\n**Permission:** `entries.attachments:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n\nFiles are grouped by attachment field id."
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/attachments",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id",
                    "attachments"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    }
                  ],
                  "query": []
                },
                "description": "List a row's attachments.\n\n**Permission:** `entries.attachments:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n\nFiles are grouped by attachment field id."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_data_id\": 189862,\n  \"attachments\": {\n    \"6\": [\n      {\n        \"filename\": \"0001_3f9a1c2b7d4e_weighbridge-slip.pdf\",\n        \"path\": \"smarttables/data/189862/attachments/6/0001_3f9a1c2b7d4e_weighbridge-slip.pdf\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "Download one attachment",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/attachments/:field_id/:filename",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id",
                "attachments",
                ":field_id",
                ":filename"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                },
                {
                  "key": "field_id",
                  "value": "6"
                },
                {
                  "key": "filename",
                  "value": "0001_3f9a1c2b7d4e_weighbridge-slip.pdf"
                }
              ],
              "query": []
            },
            "description": "Download one attachment.\n\n**Permission:** `entries.attachments:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n| `field_id` | path | integer | yes | The attachment field id |\n| `filename` | path | string | yes | A filename from the list call |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/attachments/:field_id/:filename",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id",
                    "attachments",
                    ":field_id",
                    ":filename"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    },
                    {
                      "key": "field_id",
                      "value": "6"
                    },
                    {
                      "key": "filename",
                      "value": "0001_3f9a1c2b7d4e_weighbridge-slip.pdf"
                    }
                  ],
                  "query": []
                },
                "description": "Download one attachment.\n\n**Permission:** `entries.attachments:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n| `field_id` | path | integer | yes | The attachment field id |\n| `filename` | path | string | yes | A filename from the list call |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "text",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/octet-stream"
                }
              ],
              "body": "(binary file)"
            }
          ]
        },
        {
          "name": "Upload files to an attachment field (multipart, key \"files\")",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/attachments/:field_id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id",
                "attachments",
                ":field_id"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                },
                {
                  "key": "field_id",
                  "value": "6"
                }
              ],
              "query": []
            },
            "description": "Upload files to an attachment field (multipart, key \"files\").\n\n**Permission:** `entries.attachments:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n| `field_id` | path | integer | yes | The attachment field id |\n| `files` | form | file | yes | One or more files (repeat the key), at most 20 |",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "files",
                  "type": "file",
                  "src": []
                }
              ]
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/attachments/:field_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id",
                    "attachments",
                    ":field_id"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    },
                    {
                      "key": "field_id",
                      "value": "6"
                    }
                  ],
                  "query": []
                },
                "description": "Upload files to an attachment field (multipart, key \"files\").\n\n**Permission:** `entries.attachments:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n| `field_id` | path | integer | yes | The attachment field id |\n| `files` | form | file | yes | One or more files (repeat the key), at most 20 |",
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "key": "files",
                      "type": "file",
                      "src": []
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_data_id\": 189862,\n  \"field_id\": \"6\",\n  \"files\": [\n    \"0001_3f9a1c2b7d4e_weighbridge-slip.pdf\"\n  ]\n}"
            }
          ]
        },
        {
          "name": "Remove one attachment",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/attachments/:field_id/:filename",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id",
                "attachments",
                ":field_id",
                ":filename"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                },
                {
                  "key": "field_id",
                  "value": "6"
                },
                {
                  "key": "filename",
                  "value": "0001_3f9a1c2b7d4e_weighbridge-slip.pdf"
                }
              ],
              "query": []
            },
            "description": "Remove one attachment.\n\n**Permission:** `entries.attachments:delete`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n| `field_id` | path | integer | yes | The attachment field id |\n| `filename` | path | string | yes | The stored filename |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/attachments/:field_id/:filename",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id",
                    "attachments",
                    ":field_id",
                    ":filename"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    },
                    {
                      "key": "field_id",
                      "value": "6"
                    },
                    {
                      "key": "filename",
                      "value": "0001_3f9a1c2b7d4e_weighbridge-slip.pdf"
                    }
                  ],
                  "query": []
                },
                "description": "Remove one attachment.\n\n**Permission:** `entries.attachments:delete`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n| `field_id` | path | integer | yes | The attachment field id |\n| `filename` | path | string | yes | The stored filename |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Removed\",\n  \"smarttable_data_id\": 189862,\n  \"field_id\": \"6\",\n  \"filename\": \"0001_3f9a1c2b7d4e_weighbridge-slip.pdf\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Comments and notes",
      "item": [
        {
          "name": "List a row's comments and notes",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/comments",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id",
                "comments"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                }
              ],
              "query": []
            },
            "description": "List a row's comments and notes.\n\n**Permission:** `entries.comments:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n\nkind is \"note\" for notes added in the app, else \"comment\"."
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/comments",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id",
                    "comments"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    }
                  ],
                  "query": []
                },
                "description": "List a row's comments and notes.\n\n**Permission:** `entries.comments:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n\nkind is \"note\" for notes added in the app, else \"comment\"."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_data_id\": 189862,\n  \"comments\": [\n    {\n      \"text\": \"Weighbridge slip attached.\",\n      \"author\": \"Asha Patel\",\n      \"at\": \"2026-10-12T10:02:11Z\",\n      \"kind\": \"comment\",\n      \"attachments\": []\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Add a comment to a row",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/comments",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id",
                "comments"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                }
              ],
              "query": []
            },
            "description": "Add a comment to a row.\n\n**Permission:** `entries.comments:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n| `text` | body | string | yes | Plain text, at most 5,000 characters |",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"text\": \"Unloaded at gate 3.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/comments",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id",
                    "comments"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    }
                  ],
                  "query": []
                },
                "description": "Add a comment to a row.\n\n**Permission:** `entries.comments:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n| `text` | body | string | yes | Plain text, at most 5,000 characters |",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"text\": \"Unloaded at gate 3.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Comment added\",\n  \"smarttable_data_id\": 189862\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Approval status",
      "item": [
        {
          "name": "An entry's approval status, with earlier rounds",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/entries/:smarttable_data_entry_id/approval",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "entries",
                ":smarttable_data_entry_id",
                "approval"
              ],
              "variable": [
                {
                  "key": "smarttable_data_entry_id",
                  "value": "195569"
                }
              ],
              "query": []
            },
            "description": "An entry's approval status, with earlier rounds.\n\n**Permission:** `entries.approvals:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_entry_id` | path | integer | yes | An entry id |\n\nRead only: approvers act in the app. Signatures are never returned. A SmartTable without a workflow returns just \"approval_enabled\": false."
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/entries/:smarttable_data_entry_id/approval",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "entries",
                    ":smarttable_data_entry_id",
                    "approval"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_entry_id",
                      "value": "195569"
                    }
                  ],
                  "query": []
                },
                "description": "An entry's approval status, with earlier rounds.\n\n**Permission:** `entries.approvals:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_entry_id` | path | integer | yes | An entry id |\n\nRead only: approvers act in the app. Signatures are never returned. A SmartTable without a workflow returns just \"approval_enabled\": false."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_data_entry_id\": 195569,\n  \"approval_enabled\": true,\n  \"approval\": {\n    \"approval_workflow_enabled\": true,\n    \"interleaved\": false,\n    \"total_steps\": 2,\n    \"current_step\": 2,\n    \"current_entry_step\": null,\n    \"steps_done\": 1,\n    \"steps_pending\": 1,\n    \"is_fully_approved\": false,\n    \"is_rejected\": false,\n    \"is_published\": false,\n    \"published_at\": null,\n    \"waiting_for_approval\": true,\n    \"approved_at\": null,\n    \"steps\": [\n      {\n        \"step\": 1,\n        \"label\": \"Step 1\",\n        \"mode\": \"any\",\n        \"approvers\": [\n          12,\n          15\n        ],\n        \"approvers_list\": [\n          {\n            \"name\": \"Asha Patel\"\n          },\n          {\n            \"name\": \"Vikram Rao\"\n          }\n        ],\n        \"status\": \"approved\",\n        \"approved_by\": [\n          {\n            \"name\": \"Asha Patel\"\n          }\n        ],\n        \"pending_approvers\": [],\n        \"comment\": \"Looks fine\"\n      }\n    ],\n    \"publish_notification_users\": [],\n    \"email_publish_notification_users\": [],\n    \"publish_email_settings\": {\n      \"subject\": \"\",\n      \"body\": \"\"\n    }\n  }\n}"
            }
          ]
        },
        {
          "name": "Earlier approval rounds of an entry (rejected and resubmitted)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/entries/:smarttable_data_entry_id/approval/history",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "entries",
                ":smarttable_data_entry_id",
                "approval",
                "history"
              ],
              "variable": [
                {
                  "key": "smarttable_data_entry_id",
                  "value": "195569"
                }
              ],
              "query": []
            },
            "description": "Earlier approval rounds of an entry (rejected and resubmitted).\n\n**Permission:** `entries.approvals:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_entry_id` | path | integer | yes | An entry id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/entries/:smarttable_data_entry_id/approval/history",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "entries",
                    ":smarttable_data_entry_id",
                    "approval",
                    "history"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_entry_id",
                      "value": "195569"
                    }
                  ],
                  "query": []
                },
                "description": "Earlier approval rounds of an entry (rejected and resubmitted).\n\n**Permission:** `entries.approvals:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_entry_id` | path | integer | yes | An entry id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_data_entry_id\": 195569,\n  \"rounds\": []\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Exports",
      "item": [
        {
          "name": "Download many entry PDFs as one zip. Body: {\"smarttable_data_entry_ids\": [...]} (at most 50)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/bulk/pdf",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "bulk",
                "pdf"
              ],
              "variable": [],
              "query": []
            },
            "description": "Download many entry PDFs as one zip. Body: {\"smarttable_data_entry_ids\": [...]} (at most 50).\n\n**Permission:** `entries.exports:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_entry_ids` | body | array of integer | yes | Entry ids, at most 50 |\n| `include_attachments` | body | boolean | no | Merge attached PDFs (default true) |\n\nEntries you can't read are left out and listed in the X-Skipped-Entry-Ids header. At most 5 per 5 minutes.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"smarttable_data_entry_ids\": [\n    195569,\n    195570\n  ],\n  \"include_attachments\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/bulk/pdf",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "bulk",
                    "pdf"
                  ],
                  "variable": [],
                  "query": []
                },
                "description": "Download many entry PDFs as one zip. Body: {\"smarttable_data_entry_ids\": [...]} (at most 50).\n\n**Permission:** `entries.exports:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_entry_ids` | body | array of integer | yes | Entry ids, at most 50 |\n| `include_attachments` | body | boolean | no | Merge attached PDFs (default true) |\n\nEntries you can't read are left out and listed in the X-Skipped-Entry-Ids header. At most 5 per 5 minutes.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"smarttable_data_entry_ids\": [\n    195569,\n    195570\n  ],\n  \"include_attachments\": false\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "text",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/zip"
                }
              ],
              "body": "(binary file)"
            }
          ]
        },
        {
          "name": "Download an entry's PDF (its display layout)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/entries/:smarttable_data_entry_id/pdf?include_attachments=false",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "entries",
                ":smarttable_data_entry_id",
                "pdf"
              ],
              "variable": [
                {
                  "key": "smarttable_data_entry_id",
                  "value": "195569"
                }
              ],
              "query": [
                {
                  "key": "include_attachments",
                  "value": "false"
                }
              ]
            },
            "description": "Download an entry's PDF (its display layout).\n\n**Permission:** `entries.exports:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_entry_id` | path | integer | yes | An entry id |\n| `include_attachments` | query | string | no | false leaves attached PDFs out |\n\nAt most 30 PDFs per minute."
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/entries/:smarttable_data_entry_id/pdf?include_attachments=false",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "entries",
                    ":smarttable_data_entry_id",
                    "pdf"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_entry_id",
                      "value": "195569"
                    }
                  ],
                  "query": [
                    {
                      "key": "include_attachments",
                      "value": "false"
                    }
                  ]
                },
                "description": "Download an entry's PDF (its display layout).\n\n**Permission:** `entries.exports:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_entry_id` | path | integer | yes | An entry id |\n| `include_attachments` | query | string | no | false leaves attached PDFs out |\n\nAt most 30 PDFs per minute."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "text",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/pdf"
                }
              ],
              "body": "(binary file)"
            }
          ]
        }
      ]
    },
    {
      "name": "SmartTables",
      "item": [
        {
          "name": "List the SmartTables this client can read",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables"
              ],
              "variable": [],
              "query": []
            },
            "description": "List the SmartTables this client can read.\n\n**Permission:** `smarttables:read`"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables"
                  ],
                  "variable": [],
                  "query": []
                },
                "description": "List the SmartTables this client can read.\n\n**Permission:** `smarttables:read`"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttables\": [\n    {\n      \"smarttable_id\": 61,\n      \"name\": \"Dispatch Log\",\n      \"is_approved\": true,\n      \"is_relational\": false,\n      \"observation_count\": 1,\n      \"version\": 4\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "A SmartTable with its current fields (schema)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "A SmartTable with its current fields (schema).\n\n**Permission:** `smarttables:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "A SmartTable with its current fields (schema).\n\n**Permission:** `smarttables:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable\": {\n    \"smarttable_id\": 61,\n    \"name\": \"Dispatch Log\",\n    \"is_approved\": true,\n    \"is_relational\": false,\n    \"observation_count\": 1,\n    \"version\": 4,\n    \"fields\": [\n      {\n        \"id\": 1,\n        \"name\": \"Truck number\",\n        \"ui_smarttable_element\": \"text\",\n        \"optional\": false,\n        \"hide\": false,\n        \"isDisabled\": false,\n        \"show_in_entries_list\": true,\n        \"accordion\": \"Vehicle\",\n        \"smarttable_section\": \"Dispatch\",\n        \"row\": \"\",\n        \"table\": false,\n        \"table_no\": \"\",\n        \"auto_increment\": false,\n        \"min_value_allowed\": \"\",\n        \"max_value_allowed\": \"\",\n        \"acceptance_criteria\": \"\",\n        \"allowed_data\": \"\",\n        \"properties\": \"\",\n        \"hide_for_observation_number\": \"\",\n        \"autofill_from_observation1\": false,\n        \"attachment\": \"\",\n        \"attachment_max_count\": \"\",\n        \"remarks\": false,\n        \"default\": \"\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "A SmartTable's schema versions",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/versions",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "versions"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "A SmartTable's schema versions.\n\n**Permission:** `smarttables:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/versions",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "versions"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "A SmartTable's schema versions.\n\n**Permission:** `smarttables:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"versions\": [\n    {\n      \"version\": 4,\n      \"approved\": true,\n      \"source\": \"sharepoint\",\n      \"created_at\": \"2026-10-01T08:00:00Z\",\n      \"field_count\": 12\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Create a SmartTable from a field list (it then waits for approval in the app)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables"
              ],
              "variable": [],
              "query": []
            },
            "description": "Create a SmartTable from a field list (it then waits for approval in the app).\n\n**Permission:** `smarttables:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `name` | body | string | yes | At most 255 characters |\n| `fields` | body | array | yes | Fields with the schema builder's columns |\n| `is_relational` | body | boolean | no | Default true |\n| `observation_count` | body | integer | no | 1 to 50 |\n\nNeeds smarttables:write on all SmartTables.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Dispatch Log\",\n  \"is_relational\": false,\n  \"observation_count\": 1,\n  \"fields\": [\n    {\n      \"name\": \"Truck number\",\n      \"ui_smarttable_element\": \"text\"\n    },\n    {\n      \"name\": \"Weight (t)\",\n      \"ui_smarttable_element\": \"number\",\n      \"optional\": true\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables"
                  ],
                  "variable": [],
                  "query": []
                },
                "description": "Create a SmartTable from a field list (it then waits for approval in the app).\n\n**Permission:** `smarttables:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `name` | body | string | yes | At most 255 characters |\n| `fields` | body | array | yes | Fields with the schema builder's columns |\n| `is_relational` | body | boolean | no | Default true |\n| `observation_count` | body | integer | no | 1 to 50 |\n\nNeeds smarttables:write on all SmartTables.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Dispatch Log\",\n  \"is_relational\": false,\n  \"observation_count\": 1,\n  \"fields\": [\n    {\n      \"name\": \"Truck number\",\n      \"ui_smarttable_element\": \"text\"\n    },\n    {\n      \"name\": \"Weight (t)\",\n      \"ui_smarttable_element\": \"number\",\n      \"optional\": true\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 88,\n  \"name\": \"Dispatch Log\",\n  \"message\": \"Created; it is usable once approved in the app\"\n}"
            }
          ]
        },
        {
          "name": "Change a SmartTable's fields (creates a new version)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/schema",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "schema"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "Change a SmartTable's fields (creates a new version).\n\n**Permission:** `smarttables:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `fields` | body | array | yes | The full field list; keep existing ids |\n| `allow_remove` | body | boolean | no | Allow leaving out existing fields |\n| `allow_type_change` | body | boolean | no | Allow changing a field's type |",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"fields\": [\n    {\n      \"id\": 1,\n      \"name\": \"Truck number\",\n      \"ui_smarttable_element\": \"text\"\n    },\n    {\n      \"name\": \"Driver phone\",\n      \"ui_smarttable_element\": \"text\",\n      \"optional\": true\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/schema",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "schema"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "Change a SmartTable's fields (creates a new version).\n\n**Permission:** `smarttables:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `fields` | body | array | yes | The full field list; keep existing ids |\n| `allow_remove` | body | boolean | no | Allow leaving out existing fields |\n| `allow_type_change` | body | boolean | no | Allow changing a field's type |",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"fields\": [\n    {\n      \"id\": 1,\n      \"name\": \"Truck number\",\n      \"ui_smarttable_element\": \"text\"\n    },\n    {\n      \"name\": \"Driver phone\",\n      \"ui_smarttable_element\": \"text\",\n      \"optional\": true\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"version\": 5,\n  \"message\": \"Saved; a new version may need approval in the app\"\n}"
            }
          ]
        },
        {
          "name": "Delete a SmartTable",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "Delete a SmartTable.\n\n**Permission:** `smarttables:delete`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "Delete a SmartTable.\n\n**Permission:** `smarttables:delete`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Deleted\",\n  \"smarttable_id\": 61\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Display layouts",
      "item": [
        {
          "name": "A SmartTable's display (print) layout: the latest approved version, or ?version=N",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/display?version=3",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "display"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": [
                {
                  "key": "version",
                  "value": "3"
                }
              ]
            },
            "description": "A SmartTable's display (print) layout: the latest approved version, or ?version=N.\n\n**Permission:** `smarttables.display:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `version` | query | integer | no | A version number (default the latest approved) |\n| `include_unapproved` | query | string | no | 1 to include versions not approved yet |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/display?version=3",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "display"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": [
                    {
                      "key": "version",
                      "value": "3"
                    }
                  ]
                },
                "description": "A SmartTable's display (print) layout: the latest approved version, or ?version=N.\n\n**Permission:** `smarttables.display:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `version` | query | integer | no | A version number (default the latest approved) |\n| `include_unapproved` | query | string | no | 1 to include versions not approved yet |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"display\": {\n    \"version\": 3,\n    \"approved\": true,\n    \"created_at\": \"2026-09-20T07:30:00Z\",\n    \"layout\": {\n      \"cells\": [\n        {\n          \"address\": \"B2\",\n          \"row\": 1,\n          \"column\": 1,\n          \"value\": \"<pa_1>\",\n          \"font\": {\n            \"bold\": true,\n            \"name\": \"Calibri\",\n            \"size\": 11.0\n          },\n          \"column_width\": 18.0,\n          \"row_height\": 15.0\n        }\n      ]\n    }\n  }\n}"
            }
          ]
        },
        {
          "name": "A SmartTable's display layout versions",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/display/versions",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "display",
                "versions"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "A SmartTable's display layout versions.\n\n**Permission:** `smarttables.display:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/display/versions",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "display",
                    "versions"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "A SmartTable's display layout versions.\n\n**Permission:** `smarttables.display:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"versions\": [\n    {\n      \"version\": 3,\n      \"approved\": true,\n      \"created_at\": \"2026-09-20T07:30:00Z\"\n    }\n  ]\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "SharePoint and Google Sheets",
      "item": [
        {
          "name": "Where a SmartTable's schema comes from (SharePoint, Google Sheets or the schema builder)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/source",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "source"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "Where a SmartTable's schema comes from (SharePoint, Google Sheets or the schema builder).\n\n**Permission:** `smarttables.sources:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/source",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "source"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "Where a SmartTable's schema comes from (SharePoint, Google Sheets or the schema builder).\n\n**Permission:** `smarttables.sources:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"source\": \"sharepoint\",\n  \"url\": \"https://contoso.sharepoint.com/sites/ops/Shared%20Documents/dispatch.xlsx\",\n  \"sync_locked\": false\n}"
            }
          ]
        },
        {
          "name": "Refresh a SmartTable from its spreadsheet (new versions may need approval in the app)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/sync",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "sync"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "Refresh a SmartTable from its spreadsheet (new versions may need approval in the app).\n\n**Permission:** `smarttables.sources:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n\nAt most 20 refreshes and creates per hour."
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/sync",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "sync"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "Refresh a SmartTable from its spreadsheet (new versions may need approval in the app).\n\n**Permission:** `smarttables.sources:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n\nAt most 20 refreshes and creates per hour."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"source\": \"sharepoint\",\n  \"versions_updated\": true,\n  \"entry_version\": 5,\n  \"display_version\": 3\n}"
            }
          ]
        },
        {
          "name": "Create a SmartTable from a SharePoint or Google Sheets file (it then waits for approval in the app)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/from-source",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "from-source"
              ],
              "variable": [],
              "query": []
            },
            "description": "Create a SmartTable from a SharePoint or Google Sheets file (it then waits for approval in the app).\n\n**Permission:** `smarttables.sources:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `name` | body | string | yes | At most 255 characters |\n| `sharepoint_url` | body | string | no | https link on *.sharepoint.com |\n| `google_sheets_url` | body | string | no | https link on docs.google.com (instead of sharepoint_url) |\n| `is_relational` | body | boolean | no | Default false |\n| `observation_count` | body | integer | no | 1 to 50 |\n\nNeeds smarttables.sources:write and smarttables:write, both on all SmartTables.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Vehicle Master\",\n  \"sharepoint_url\": \"https://contoso.sharepoint.com/sites/ops/Shared%20Documents/vehicles.xlsx\",\n  \"is_relational\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/from-source",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "from-source"
                  ],
                  "variable": [],
                  "query": []
                },
                "description": "Create a SmartTable from a SharePoint or Google Sheets file (it then waits for approval in the app).\n\n**Permission:** `smarttables.sources:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `name` | body | string | yes | At most 255 characters |\n| `sharepoint_url` | body | string | no | https link on *.sharepoint.com |\n| `google_sheets_url` | body | string | no | https link on docs.google.com (instead of sharepoint_url) |\n| `is_relational` | body | boolean | no | Default false |\n| `observation_count` | body | integer | no | 1 to 50 |\n\nNeeds smarttables.sources:write and smarttables:write, both on all SmartTables.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Vehicle Master\",\n  \"sharepoint_url\": \"https://contoso.sharepoint.com/sites/ops/Shared%20Documents/vehicles.xlsx\",\n  \"is_relational\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 89,\n  \"name\": \"Vehicle Master\",\n  \"message\": \"Created; it is usable once approved in the app\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "SmartTable settings",
      "item": [
        {
          "name": "A SmartTable's settings",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/settings",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "settings"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "A SmartTable's settings.\n\n**Permission:** `smarttables.settings:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/settings",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "settings"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "A SmartTable's settings.\n\n**Permission:** `smarttables.settings:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"settings\": {\n    \"observation_count\": 1,\n    \"submit_button_label\": \"Submit\",\n    \"show_observation_number\": false,\n    \"show_min_max_values\": true,\n    \"is_autosave_enabled\": true,\n    \"autosave_enabled_by_default\": false,\n    \"enable_attestation\": false,\n    \"require_submitter_signature\": false,\n    \"enable_notification_comments\": false,\n    \"enable_notes\": false,\n    \"enable_entry_access_control\": false,\n    \"autosave_interval\": 60,\n    \"freeze_columns_fields\": [\n      1\n    ],\n    \"filter_fields\": [\n      8\n    ],\n    \"pdf_filename_fields\": [\n      1\n    ],\n    \"primary_field_id\": null,\n    \"entries_page_size\": 100,\n    \"show_entries\": \"all\",\n    \"show_entries_attribute_id\": null,\n    \"submit_admin_users\": [],\n    \"unsubmit_admin_users\": [],\n    \"attest_users\": [],\n    \"submit_notification_users\": [],\n    \"offline_enabled\": false,\n    \"compress_attachments\": true\n  }\n}"
            }
          ]
        },
        {
          "name": "Change some of a SmartTable's settings (only the keys sent)",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/settings",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "settings"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "Change some of a SmartTable's settings (only the keys sent).\n\n**Permission:** `smarttables.settings:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `<setting>` | body | any | yes | Only the settings to change (see the guide for the list) |\n\nSaves a new settings version and returns all settings.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"submit_button_label\": \"Send\",\n  \"autosave_interval\": 30\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/settings",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "settings"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "Change some of a SmartTable's settings (only the keys sent).\n\n**Permission:** `smarttables.settings:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `<setting>` | body | any | yes | Only the settings to change (see the guide for the list) |\n\nSaves a new settings version and returns all settings.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"submit_button_label\": \"Send\",\n  \"autosave_interval\": 30\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"version\": 7,\n  \"settings\": {\n    \"observation_count\": 1,\n    \"submit_button_label\": \"Send\",\n    \"show_observation_number\": false,\n    \"show_min_max_values\": true,\n    \"is_autosave_enabled\": true,\n    \"autosave_enabled_by_default\": false,\n    \"enable_attestation\": false,\n    \"require_submitter_signature\": false,\n    \"enable_notification_comments\": false,\n    \"enable_notes\": false,\n    \"enable_entry_access_control\": false,\n    \"autosave_interval\": 30,\n    \"freeze_columns_fields\": [\n      1\n    ],\n    \"filter_fields\": [\n      8\n    ],\n    \"pdf_filename_fields\": [\n      1\n    ],\n    \"primary_field_id\": null,\n    \"entries_page_size\": 100,\n    \"show_entries\": \"all\",\n    \"show_entries_attribute_id\": null,\n    \"submit_admin_users\": [],\n    \"unsubmit_admin_users\": [],\n    \"attest_users\": [],\n    \"submit_notification_users\": [],\n    \"offline_enabled\": false,\n    \"compress_attachments\": true\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Approval workflow",
      "item": [
        {
          "name": "A SmartTable's approval workflow",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/approval-workflow",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "approval-workflow"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "A SmartTable's approval workflow.\n\n**Permission:** `smarttables.approval:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/approval-workflow",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "approval-workflow"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "A SmartTable's approval workflow.\n\n**Permission:** `smarttables.approval:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"approval_workflow\": {\n    \"enabled\": true,\n    \"interleaved\": false,\n    \"step0\": {\n      \"enabled\": false,\n      \"notify_on_later_steps\": false,\n      \"deadline_days\": 0\n    },\n    \"steps\": [\n      {\n        \"step\": 1,\n        \"mode\": \"any\",\n        \"approvers\": [\n          12,\n          15\n        ],\n        \"notify_on_later_steps\": false,\n        \"deadline_days\": 2\n      }\n    ],\n    \"on_publish\": {\n      \"notify_users\": [],\n      \"email_users\": [\n        30\n      ],\n      \"email\": {\n        \"subject\": \"Approved\",\n        \"body\": \"Please find the PDF attached.\",\n        \"signature\": \"\"\n      }\n    }\n  }\n}"
            }
          ]
        },
        {
          "name": "Replace a SmartTable's approval workflow (applies to entries created afterwards)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/approval-workflow",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "approval-workflow"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "Replace a SmartTable's approval workflow (applies to entries created afterwards).\n\n**Permission:** `smarttables.approval:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `enabled` | body | boolean | yes | false turns approvals off |\n| `steps` | body | array | no | 1 to 20 steps: mode any|all, approvers (user ids), deadline_days |\n| `step0` | body | object | no | enabled, notify_on_later_steps, deadline_days |\n| `on_publish` | body | object | no | notify_users, email_users, email {subject, body, signature} |",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"enabled\": true,\n  \"steps\": [\n    {\n      \"mode\": \"any\",\n      \"approvers\": [\n        12,\n        15\n      ],\n      \"deadline_days\": 2\n    },\n    {\n      \"mode\": \"all\",\n      \"approvers\": [\n        20\n      ]\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/approval-workflow",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "approval-workflow"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "Replace a SmartTable's approval workflow (applies to entries created afterwards).\n\n**Permission:** `smarttables.approval:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `enabled` | body | boolean | yes | false turns approvals off |\n| `steps` | body | array | no | 1 to 20 steps: mode any|all, approvers (user ids), deadline_days |\n| `step0` | body | object | no | enabled, notify_on_later_steps, deadline_days |\n| `on_publish` | body | object | no | notify_users, email_users, email {subject, body, signature} |",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"enabled\": true,\n  \"steps\": [\n    {\n      \"mode\": \"any\",\n      \"approvers\": [\n        12,\n        15\n      ],\n      \"deadline_days\": 2\n    },\n    {\n      \"mode\": \"all\",\n      \"approvers\": [\n        20\n      ]\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"version\": 6,\n  \"approval_workflow\": {\n    \"enabled\": true,\n    \"interleaved\": false,\n    \"step0\": {\n      \"enabled\": false,\n      \"notify_on_later_steps\": false,\n      \"deadline_days\": 0\n    },\n    \"steps\": [\n      {\n        \"step\": 1,\n        \"mode\": \"any\",\n        \"approvers\": [\n          12,\n          15\n        ],\n        \"notify_on_later_steps\": false,\n        \"deadline_days\": 2\n      }\n    ],\n    \"on_publish\": {\n      \"notify_users\": [],\n      \"email_users\": [\n        30\n      ],\n      \"email\": {\n        \"subject\": \"Approved\",\n        \"body\": \"Please find the PDF attached.\",\n        \"signature\": \"\"\n      }\n    }\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "SmartTable Steps",
      "item": [
        {
          "name": "A SmartTable's steps and who is assigned to each",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/steps",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "steps"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "A SmartTable's steps and who is assigned to each.\n\n**Permission:** `smarttables.steps:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/steps",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "steps"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "A SmartTable's steps and who is assigned to each.\n\n**Permission:** `smarttables.steps:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"steps\": [\n    {\n      \"step_number\": 1,\n      \"step_name\": \"Gate in\",\n      \"sheet_step_name\": \"Gate in\",\n      \"field_count\": 6,\n      \"assignees\": {\n        \"users\": [\n          12\n        ]\n      },\n      \"resolved_users\": [\n        {\n          \"id\": 12,\n          \"name\": \"Asha Patel\"\n        }\n      ],\n      \"show_to_later_steps\": false\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Set who is assigned to each step (steps left out are deactivated)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/steps",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "steps"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "Set who is assigned to each step (steps left out are deactivated).\n\n**Permission:** `smarttables.steps:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `steps` | body | array | yes | step_number + assignees {users, attributes}; left out = deactivated |",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"steps\": [\n    {\n      \"step_number\": 1,\n      \"assignees\": {\n        \"users\": [\n          12\n        ]\n      }\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/steps",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "steps"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "Set who is assigned to each step (steps left out are deactivated).\n\n**Permission:** `smarttables.steps:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `steps` | body | array | yes | step_number + assignees {users, attributes}; left out = deactivated |",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"steps\": [\n    {\n      \"step_number\": 1,\n      \"assignees\": {\n        \"users\": [\n          12\n        ]\n      }\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"steps\": [\n    {\n      \"step_number\": 1,\n      \"step_name\": \"Gate in\",\n      \"sheet_step_name\": \"Gate in\",\n      \"field_count\": 6,\n      \"assignees\": {\n        \"users\": [\n          12\n        ]\n      },\n      \"resolved_users\": [\n        {\n          \"id\": 12,\n          \"name\": \"Asha Patel\"\n        }\n      ],\n      \"show_to_later_steps\": false\n    }\n  ]\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Access",
      "item": [
        {
          "name": "Who has access to a SmartTable, and with which role",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/access",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "access"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "Who has access to a SmartTable, and with which role.\n\n**Permission:** `access:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/access",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "access"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "Who has access to a SmartTable, and with which role.\n\n**Permission:** `access:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"access\": [\n    {\n      \"user_id\": 12,\n      \"name\": \"Asha Patel\",\n      \"username\": \"asha.patel\",\n      \"role\": \"admin\",\n      \"is_api_client\": false\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Give users access to a SmartTable (role: admin, user or viewer)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/access",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "access"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "Give users access to a SmartTable (role: admin, user or viewer).\n\n**Permission:** `access:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `user_ids` | body | array of integer | yes | Active users of your organization |\n| `role` | body | string | no | admin, user (default) or viewer |",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"user_ids\": [\n    12,\n    15\n  ],\n  \"role\": \"user\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/access",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "access"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "Give users access to a SmartTable (role: admin, user or viewer).\n\n**Permission:** `access:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `user_ids` | body | array of integer | yes | Active users of your organization |\n| `role` | body | string | no | admin, user (default) or viewer |",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"user_ids\": [\n    12,\n    15\n  ],\n  \"role\": \"user\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"granted\": [\n    15\n  ],\n  \"already_had_access\": [\n    12\n  ],\n  \"role\": \"user\"\n}"
            }
          ]
        },
        {
          "name": "Change a user's role on a SmartTable",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/access/:user_id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "access",
                ":user_id"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                },
                {
                  "key": "user_id",
                  "value": "15"
                }
              ],
              "query": []
            },
            "description": "Change a user's role on a SmartTable.\n\n**Permission:** `access:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `user_id` | path | integer | yes | A user id of your organization |\n| `role` | body | string | yes | admin, user or viewer |\n| `force` | body | boolean | no | Go ahead although the user holds an in-progress step |",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"role\": \"viewer\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/access/:user_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "access",
                    ":user_id"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    },
                    {
                      "key": "user_id",
                      "value": "15"
                    }
                  ],
                  "query": []
                },
                "description": "Change a user's role on a SmartTable.\n\n**Permission:** `access:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `user_id` | path | integer | yes | A user id of your organization |\n| `role` | body | string | yes | admin, user or viewer |\n| `force` | body | boolean | no | Go ahead although the user holds an in-progress step |",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"role\": \"viewer\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"user_id\": 15,\n  \"role\": \"viewer\"\n}"
            }
          ]
        },
        {
          "name": "Remove a user's access to a SmartTable",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/access/:user_id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "access",
                ":user_id"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                },
                {
                  "key": "user_id",
                  "value": "15"
                }
              ],
              "query": []
            },
            "description": "Remove a user's access to a SmartTable.\n\n**Permission:** `access:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `user_id` | path | integer | yes | A user id of your organization |\n| `force` | query | string | no | true: remove although the user holds an in-progress step |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/access/:user_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "access",
                    ":user_id"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    },
                    {
                      "key": "user_id",
                      "value": "15"
                    }
                  ],
                  "query": []
                },
                "description": "Remove a user's access to a SmartTable.\n\n**Permission:** `access:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `user_id` | path | integer | yes | A user id of your organization |\n| `force` | query | string | no | true: remove although the user holds an in-progress step |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Access removed\",\n  \"smarttable_id\": 61,\n  \"user_id\": 15\n}"
            }
          ]
        },
        {
          "name": "The organization's users (id, name, username), to give access to",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/access/users?search=asha",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "access",
                "users"
              ],
              "variable": [],
              "query": [
                {
                  "key": "search",
                  "value": "asha"
                }
              ]
            },
            "description": "The organization's users (id, name, username), to give access to.\n\n**Permission:** `access:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `search` | query | string | no | Name or username |\n| `page` | query | integer | no | From 1 |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/access/users?search=asha",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "access",
                    "users"
                  ],
                  "variable": [],
                  "query": [
                    {
                      "key": "search",
                      "value": "asha"
                    }
                  ]
                },
                "description": "The organization's users (id, name, username), to give access to.\n\n**Permission:** `access:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `search` | query | string | no | Name or username |\n| `page` | query | integer | no | From 1 |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"users\": [\n    {\n      \"user_id\": 12,\n      \"name\": \"Asha Patel\",\n      \"username\": \"asha.patel\"\n    }\n  ],\n  \"page\": 1,\n  \"page_size\": 100,\n  \"total_count\": 1\n}"
            }
          ]
        },
        {
          "name": "A SmartTable's entry access rules (who can view, edit and administer its rows)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/entry-access",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "entry-access"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "A SmartTable's entry access rules (who can view, edit and administer its rows).\n\n**Permission:** `access:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/entry-access",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "entry-access"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "A SmartTable's entry access rules (who can view, edit and administer its rows).\n\n**Permission:** `access:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"feature_enabled_on_server\": true,\n  \"enabled\": true,\n  \"rules\": {\n    \"view\": {\n      \"match_creator_attribute\": \"5\"\n    },\n    \"edit\": {\n      \"creator_only\": true\n    },\n    \"admin\": {}\n  },\n  \"show_entries\": \"all\"\n}"
            }
          ]
        },
        {
          "name": "Set a SmartTable's entry access rules and switch them on or off (new version)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/entry-access",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "entry-access"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "Set a SmartTable's entry access rules and switch them on or off (new version).\n\n**Permission:** `access:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `enabled` | body | boolean | no | Switch entry access control on or off |\n| `rules` | body | object | no | view / edit / admin: users, attributes, creator_only, match_creator_attribute, or null |",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"enabled\": true,\n  \"rules\": {\n    \"view\": {\n      \"match_creator_attribute\": \"5\"\n    },\n    \"edit\": {\n      \"creator_only\": true,\n      \"users\": [\n        12\n      ]\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/entry-access",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "entry-access"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "Set a SmartTable's entry access rules and switch them on or off (new version).\n\n**Permission:** `access:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n| `enabled` | body | boolean | no | Switch entry access control on or off |\n| `rules` | body | object | no | view / edit / admin: users, attributes, creator_only, match_creator_attribute, or null |",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"enabled\": true,\n  \"rules\": {\n    \"view\": {\n      \"match_creator_attribute\": \"5\"\n    },\n    \"edit\": {\n      \"creator_only\": true,\n      \"users\": [\n        12\n      ]\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"feature_enabled_on_server\": true,\n  \"enabled\": true,\n  \"rules\": {\n    \"view\": {\n      \"match_creator_attribute\": \"5\"\n    },\n    \"edit\": {\n      \"creator_only\": true,\n      \"users\": [\n        12\n      ]\n    },\n    \"admin\": {}\n  },\n  \"show_entries\": \"all\"\n}"
            }
          ]
        },
        {
          "name": "Set who can view, edit or administer one row (overrides the SmartTable default)",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/access",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id",
                "access"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                }
              ],
              "query": []
            },
            "description": "Set who can view, edit or administer one row (overrides the SmartTable default).\n\n**Permission:** `access:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n| `view | edit | admin` | body | object or null | yes | {\"users\": [...], \"attributes\": {attr id: [values]}}; null = back to the SmartTable default |",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"view\": {\n    \"users\": [\n      12\n    ]\n  },\n  \"edit\": null\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/access",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id",
                    "access"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    }
                  ],
                  "query": []
                },
                "description": "Set who can view, edit or administer one row (overrides the SmartTable default).\n\n**Permission:** `access:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |\n| `view | edit | admin` | body | object or null | yes | {\"users\": [...], \"attributes\": {attr id: [values]}}; null = back to the SmartTable default |",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"view\": {\n    \"users\": [\n      12\n    ]\n  },\n  \"edit\": null\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_data_id\": 189862,\n  \"access\": {\n    \"view\": {\n      \"users\": [\n        12\n      ]\n    }\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Folders",
      "item": [
        {
          "name": "List folders",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/folders",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "folders"
              ],
              "variable": [],
              "query": []
            },
            "description": "List folders.\n\n**Permission:** `folders:read`"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/folders",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "folders"
                  ],
                  "variable": [],
                  "query": []
                },
                "description": "List folders.\n\n**Permission:** `folders:read`"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"folders\": [\n    {\n      \"folder_id\": 7,\n      \"name\": \"Dispatch\",\n      \"smarttable_ids\": [\n        61,\n        62\n      ],\n      \"shared_with\": [\n        {\n          \"user_id\": 12,\n          \"name\": \"Asha Patel\"\n        }\n      ]\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Create a folder (needs folders:write on all folders)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/folders",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "folders"
              ],
              "variable": [],
              "query": []
            },
            "description": "Create a folder (needs folders:write on all folders).\n\n**Permission:** `folders:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `name` | body | string | yes | At most 255 characters |\n\nNeeds folders:write on all folders.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Dispatch\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/folders",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "folders"
                  ],
                  "variable": [],
                  "query": []
                },
                "description": "Create a folder (needs folders:write on all folders).\n\n**Permission:** `folders:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `name` | body | string | yes | At most 255 characters |\n\nNeeds folders:write on all folders.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Dispatch\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"folder\": {\n    \"folder_id\": 7,\n    \"name\": \"Dispatch\",\n    \"smarttable_ids\": [],\n    \"shared_with\": []\n  }\n}"
            }
          ]
        },
        {
          "name": "Rename a folder",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/folders/:folder_id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "folders",
                ":folder_id"
              ],
              "variable": [
                {
                  "key": "folder_id",
                  "value": "7"
                }
              ],
              "query": []
            },
            "description": "Rename a folder.\n\n**Permission:** `folders:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `folder_id` | path | integer | yes | A folder id |\n| `name` | body | string | yes | At most 255 characters |",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Dispatch (North)\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/folders/:folder_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "folders",
                    ":folder_id"
                  ],
                  "variable": [
                    {
                      "key": "folder_id",
                      "value": "7"
                    }
                  ],
                  "query": []
                },
                "description": "Rename a folder.\n\n**Permission:** `folders:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `folder_id` | path | integer | yes | A folder id |\n| `name` | body | string | yes | At most 255 characters |",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Dispatch (North)\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"folder\": {\n    \"folder_id\": 7,\n    \"name\": \"Dispatch (North)\",\n    \"smarttable_ids\": [\n      61,\n      62\n    ],\n    \"shared_with\": [\n      {\n        \"user_id\": 12,\n        \"name\": \"Asha Patel\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "Set a folder's SmartTables (a SmartTable is in at most one folder)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/folders/:folder_id/smarttables",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "folders",
                ":folder_id",
                "smarttables"
              ],
              "variable": [
                {
                  "key": "folder_id",
                  "value": "7"
                }
              ],
              "query": []
            },
            "description": "Set a folder's SmartTables (a SmartTable is in at most one folder).\n\n**Permission:** `folders:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `folder_id` | path | integer | yes | A folder id |\n| `smarttable_ids` | body | array of integer | yes | The folder's SmartTables, at most 500 |",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"smarttable_ids\": [\n    61,\n    62\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/folders/:folder_id/smarttables",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "folders",
                    ":folder_id",
                    "smarttables"
                  ],
                  "variable": [
                    {
                      "key": "folder_id",
                      "value": "7"
                    }
                  ],
                  "query": []
                },
                "description": "Set a folder's SmartTables (a SmartTable is in at most one folder).\n\n**Permission:** `folders:write`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `folder_id` | path | integer | yes | A folder id |\n| `smarttable_ids` | body | array of integer | yes | The folder's SmartTables, at most 500 |",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"smarttable_ids\": [\n    61,\n    62\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"folder\": {\n    \"folder_id\": 7,\n    \"name\": \"Dispatch\",\n    \"smarttable_ids\": [\n      61,\n      62\n    ],\n    \"shared_with\": [\n      {\n        \"user_id\": 12,\n        \"name\": \"Asha Patel\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "Delete a folder (its SmartTables are not deleted)",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/folders/:folder_id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "folders",
                ":folder_id"
              ],
              "variable": [
                {
                  "key": "folder_id",
                  "value": "7"
                }
              ],
              "query": []
            },
            "description": "Delete a folder (its SmartTables are not deleted).\n\n**Permission:** `folders:delete`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `folder_id` | path | integer | yes | A folder id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/folders/:folder_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "folders",
                    ":folder_id"
                  ],
                  "variable": [
                    {
                      "key": "folder_id",
                      "value": "7"
                    }
                  ],
                  "query": []
                },
                "description": "Delete a folder (its SmartTables are not deleted).\n\n**Permission:** `folders:delete`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `folder_id` | path | integer | yes | A folder id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"message\": \"Deleted\",\n  \"folder_id\": 7\n}"
            }
          ]
        },
        {
          "name": "Share a folder: users get the 'user' role on its SmartTables",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external/v1/folders/:folder_id/share",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "folders",
                ":folder_id",
                "share"
              ],
              "variable": [
                {
                  "key": "folder_id",
                  "value": "7"
                }
              ],
              "query": []
            },
            "description": "Share a folder: users get the 'user' role on its SmartTables.\n\n**Permission:** `folders:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `folder_id` | path | integer | yes | A folder id |\n| `user_ids` | body | array of integer | yes | Active users of your organization |",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"user_ids\": [\n    12\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/external/v1/folders/:folder_id/share",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "folders",
                    ":folder_id",
                    "share"
                  ],
                  "variable": [
                    {
                      "key": "folder_id",
                      "value": "7"
                    }
                  ],
                  "query": []
                },
                "description": "Share a folder: users get the 'user' role on its SmartTables.\n\n**Permission:** `folders:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `folder_id` | path | integer | yes | A folder id |\n| `user_ids` | body | array of integer | yes | Active users of your organization |",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"user_ids\": [\n    12\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"folder\": {\n    \"folder_id\": 7,\n    \"name\": \"Dispatch\",\n    \"smarttable_ids\": [\n      61,\n      62\n    ],\n    \"shared_with\": [\n      {\n        \"user_id\": 12,\n        \"name\": \"Asha Patel\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "Unshare a folder: removes the user's 'user' role on its SmartTables",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/folders/:folder_id/share/:user_id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "folders",
                ":folder_id",
                "share",
                ":user_id"
              ],
              "variable": [
                {
                  "key": "folder_id",
                  "value": "7"
                },
                {
                  "key": "user_id",
                  "value": "12"
                }
              ],
              "query": []
            },
            "description": "Unshare a folder: removes the user's 'user' role on its SmartTables.\n\n**Permission:** `folders:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `folder_id` | path | integer | yes | A folder id |\n| `user_id` | path | integer | yes | A user id of your organization |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/folders/:folder_id/share/:user_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "folders",
                    ":folder_id",
                    "share",
                    ":user_id"
                  ],
                  "variable": [
                    {
                      "key": "folder_id",
                      "value": "7"
                    },
                    {
                      "key": "user_id",
                      "value": "12"
                    }
                  ],
                  "query": []
                },
                "description": "Unshare a folder: removes the user's 'user' role on its SmartTables.\n\n**Permission:** `folders:admin`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `folder_id` | path | integer | yes | A folder id |\n| `user_id` | path | integer | yes | A user id of your organization |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"folder\": {\n    \"folder_id\": 7,\n    \"name\": \"Dispatch\",\n    \"smarttable_ids\": [\n      61,\n      62\n    ],\n    \"shared_with\": []\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "History",
      "item": [
        {
          "name": "A SmartTable's history: versions, approvals, settings changes, bulk uploads",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/history",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "history"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "A SmartTable's history: versions, approvals, settings changes, bulk uploads.\n\n**Permission:** `audit:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n\nTimes are in IST (the app's display time)."
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/history",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "history"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "A SmartTable's history: versions, approvals, settings changes, bulk uploads.\n\n**Permission:** `audit:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |\n\nTimes are in IST (the app's display time)."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"history\": [\n    {\n      \"event\": \"ENTRY_VERSION_CREATED\",\n      \"action\": \"ENTRY_VERSION_CREATED\",\n      \"timestamp\": \"2026-10-01 13:30:00\",\n      \"performed_by\": \"Asha Patel\",\n      \"details\": {\n        \"version\": 5,\n        \"approved\": 1\n      }\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "A SmartTable's settings changes (latest 100)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/settings-log",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                ":smarttable_id",
                "settings-log"
              ],
              "variable": [
                {
                  "key": "smarttable_id",
                  "value": "61"
                }
              ],
              "query": []
            },
            "description": "A SmartTable's settings changes (latest 100).\n\n**Permission:** `audit:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/:smarttable_id/settings-log",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    ":smarttable_id",
                    "settings-log"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_id",
                      "value": "61"
                    }
                  ],
                  "query": []
                },
                "description": "A SmartTable's settings changes (latest 100).\n\n**Permission:** `audit:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_id` | path | integer | yes | The SmartTable id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_id\": 61,\n  \"changes\": [\n    {\n      \"id\": 85235,\n      \"event\": \"SMART_TABLE_SETTINGS_UPDATED\",\n      \"timestamp\": \"2026-10-02 11:42:00\",\n      \"user_name\": \"Asha Patel\",\n      \"details\": {\n        \"autosave_interval\": \"30\",\n        \"submit_button_label\": \"Send\"\n      }\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "A row's history: saves, submits, approvals, deletes",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/history",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "smarttables",
                "data",
                ":smarttable_data_id",
                "history"
              ],
              "variable": [
                {
                  "key": "smarttable_data_id",
                  "value": "189862"
                }
              ],
              "query": []
            },
            "description": "A row's history: saves, submits, approvals, deletes.\n\n**Permission:** `audit:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/smarttables/data/:smarttable_data_id/history",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "smarttables",
                    "data",
                    ":smarttable_data_id",
                    "history"
                  ],
                  "variable": [
                    {
                      "key": "smarttable_data_id",
                      "value": "189862"
                    }
                  ],
                  "query": []
                },
                "description": "A row's history: saves, submits, approvals, deletes.\n\n**Permission:** `audit:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `smarttable_data_id` | path | integer | yes | A row (observation) id |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"smarttable_data_id\": 189862,\n  \"history\": [\n    {\n      \"event\": \"SMART_TABLE_DATA_SAVED\",\n      \"timestamp\": \"2026-10-12 15:11:07\",\n      \"performed_by\": \"Acme Logistics (integration)\",\n      \"details\": {}\n    }\n  ]\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Users (read only)",
      "item": [
        {
          "name": "List the organization's users (paged; search, role, active, attribute filters)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/users?search=asha&active=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "users"
              ],
              "variable": [],
              "query": [
                {
                  "key": "search",
                  "value": "asha"
                },
                {
                  "key": "active",
                  "value": "1"
                }
              ]
            },
            "description": "List the organization's users (paged; search, role, active, attribute filters).\n\n**Permission:** `users:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `search` | query | string | no | Name, username or email |\n| `role` | query | string | no | A role name |\n| `active` | query | string | no | 1 active, 0 inactive |\n| `attribute_id` | query | integer | no | Users with this attribute set |\n| `attribute_value` | query | string | no | With attribute_id: that exact value |\n| `page` | query | integer | no | From 1; 100 per page |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/users?search=asha&active=1",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "users"
                  ],
                  "variable": [],
                  "query": [
                    {
                      "key": "search",
                      "value": "asha"
                    },
                    {
                      "key": "active",
                      "value": "1"
                    }
                  ]
                },
                "description": "List the organization's users (paged; search, role, active, attribute filters).\n\n**Permission:** `users:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `search` | query | string | no | Name, username or email |\n| `role` | query | string | no | A role name |\n| `active` | query | string | no | 1 active, 0 inactive |\n| `attribute_id` | query | integer | no | Users with this attribute set |\n| `attribute_value` | query | string | no | With attribute_id: that exact value |\n| `page` | query | integer | no | From 1; 100 per page |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"users\": [\n    {\n      \"user_id\": 12,\n      \"name\": \"Asha Patel\",\n      \"username\": \"asha.patel\",\n      \"email\": \"asha.patel@example.com\",\n      \"role\": \"User\",\n      \"active\": true,\n      \"mfa_enabled\": false,\n      \"attributes\": [\n        {\n          \"attribute_id\": 5,\n          \"name\": \"Department\",\n          \"value\": \"Logistics\"\n        }\n      ],\n      \"created_at\": \"2026-03-02T05:10:00Z\",\n      \"updated_at\": \"2026-09-28T11:02:43Z\"\n    }\n  ],\n  \"page\": 1,\n  \"page_size\": 100,\n  \"total_count\": 1,\n  \"total_pages\": 1\n}"
            }
          ]
        },
        {
          "name": "One user",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/users/:user_id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "users",
                ":user_id"
              ],
              "variable": [
                {
                  "key": "user_id",
                  "value": "12"
                }
              ],
              "query": []
            },
            "description": "One user.\n\n**Permission:** `users:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `user_id` | path | integer | yes | A user id of your organization |"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/users/:user_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "users",
                    ":user_id"
                  ],
                  "variable": [
                    {
                      "key": "user_id",
                      "value": "12"
                    }
                  ],
                  "query": []
                },
                "description": "One user.\n\n**Permission:** `users:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `user_id` | path | integer | yes | A user id of your organization |"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"user\": {\n    \"user_id\": 12,\n    \"name\": \"Asha Patel\",\n    \"username\": \"asha.patel\",\n    \"email\": \"asha.patel@example.com\",\n    \"role\": \"User\",\n    \"active\": true,\n    \"mfa_enabled\": false,\n    \"attributes\": [\n      {\n        \"attribute_id\": 5,\n        \"name\": \"Department\",\n        \"value\": \"Logistics\"\n      }\n    ],\n    \"created_at\": \"2026-03-02T05:10:00Z\",\n    \"updated_at\": \"2026-09-28T11:02:43Z\"\n  }\n}"
            }
          ]
        },
        {
          "name": "The SmartTables a user has been given access to, and their role on each (only SmartTables this client may read the access of)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/users/:user_id/smarttables",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "users",
                ":user_id",
                "smarttables"
              ],
              "variable": [
                {
                  "key": "user_id",
                  "value": "12"
                }
              ],
              "query": []
            },
            "description": "The SmartTables a user has been given access to, and their role on each (only SmartTables this client may read the access of).\n\n**Permission:** `users:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `user_id` | path | integer | yes | A user id of your organization |\n\nLists only SmartTables your access:read covers."
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/users/:user_id/smarttables",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "users",
                    ":user_id",
                    "smarttables"
                  ],
                  "variable": [
                    {
                      "key": "user_id",
                      "value": "12"
                    }
                  ],
                  "query": []
                },
                "description": "The SmartTables a user has been given access to, and their role on each (only SmartTables this client may read the access of).\n\n**Permission:** `users:read`\n\n| Parameter | In | Type | Required | Description |\n|---|---|---|---|---|\n| `user_id` | path | integer | yes | A user id of your organization |\n\nLists only SmartTables your access:read covers."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"user_id\": 12,\n  \"smarttables\": [\n    {\n      \"smarttable_id\": 61,\n      \"name\": \"Dispatch Log\",\n      \"role\": \"admin\"\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "The organization's roles",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/roles",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "roles"
              ],
              "variable": [],
              "query": []
            },
            "description": "The organization's roles.\n\n**Permission:** `users:read`"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/roles",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "roles"
                  ],
                  "variable": [],
                  "query": []
                },
                "description": "The organization's roles.\n\n**Permission:** `users:read`"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"roles\": [\n    {\n      \"role_id\": 3,\n      \"name\": \"User\"\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "The organization's user attributes (definitions)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external/v1/user-attributes",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external",
                "v1",
                "user-attributes"
              ],
              "variable": [],
              "query": []
            },
            "description": "The organization's user attributes (definitions).\n\n**Permission:** `users:read`"
          },
          "response": [
            {
              "name": "Example",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/external/v1/user-attributes",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "external",
                    "v1",
                    "user-attributes"
                  ],
                  "variable": [],
                  "query": []
                },
                "description": "The organization's user attributes (definitions).\n\n**Permission:** `users:read`"
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"attributes\": [\n    {\n      \"attribute_id\": 5,\n      \"name\": \"Department\",\n      \"type\": \"TEXT_INPUT\",\n      \"default_value\": null,\n      \"is_filter\": true\n    }\n  ]\n}"
            }
          ]
        }
      ]
    }
  ]
}
