{"info":{"_postman_id":"561b9ff0-5172-43b6-a761-861c0f0295a6","name":"Origami API Documentation","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"description":"<html><head></head><body></body></html>","owner":"2653695","collectionId":"561b9ff0-5172-43b6-a761-861c0f0295a6","publishedId":"2s93kz65gS","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2024-05-28T08:26:06.000Z"},"item":[{"name":"1. Entity Structure","item":[{"name":"List All Entities","id":"a1d864a7-d8b8-4f34-8a0d-2e45339fbc6f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\"\n}"},"url":"{{base_url}}/entities/api/entities_list/format/json","description":"<p>Returns every entity the API user has permission to access. Use this to discover entity_data_name values (e.g., e_725) which you'll need for all subsequent calls.</p>\n<p>The response is an array of objects, each with entity_name, entity_data_name, and protected_entity fields. Check protected_entity to know if you need to use instance_data_protected instead of instance_data for reading.</p>\n","urlObject":{"path":["entities","api","entities_list","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"a1d864a7-d8b8-4f34-8a0d-2e45339fbc6f"},{"name":"Get Entity Structure (Fields & Groups)","id":"e1e0b129-993c-4b69-9dc0-b99e6f8a7112","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\"\n}"},"url":"{{base_url}}/entities/api/entity_structure/format/json","description":"<p>Returns the full schema of a specific entity — all field groups, field names, field types, data names, and validation rules. This is essential for building create/update requests, since you'll need the exact group_data_name and field_data_name values.</p>\n<p>Note: The schema comes back in instance_data (an array of group objects), NOT in data. Each group contains a fields_data array listing every field with its type, data name, and validation constraints. Pay attention to field_data_name — that's the key you'll use in create and update calls.</p>\n","urlObject":{"path":["entities","api","entity_structure","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"e1e0b129-993c-4b69-9dc0-b99e6f8a7112"}],"id":"3db6811c-b8b4-4fde-aa21-503941439b2d","description":"<p>Before you start working with records, you'll need to know which entities (tables) exist in your account and what fields they contain. These two endpoints let you discover the data model.</p>\n<p>Tip: Custom API Names — By default, Origami auto-generates internal names like e_725 for entities, g_1790 for field groups, and fld_11693 for fields. You can assign custom, human-readable API names in Origami Settings → General Settings → Developer Section.</p>\n","_postman_id":"3db6811c-b8b4-4fde-aa21-503941439b2d"},{"name":"2. Create Instance","item":[{"name":"Create Instance","id":"432d2d40-66d8-40b5-8166-95c92f2b7c70","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\",\n  \"form_data\": [\n    {\n      \"group_data_name\": \"g_1790\",\n      \"data\": [\n        {\n          \"fld_11693\": \"John\",\n          \"fld_11694\": \"Doe\",\n          \"fld_11695\": \"123456789\",\n          \"fld_11696\": \"050-1234567\",\n          \"fld_11731\": \"john@example.com\"\n        }\n      ]\n    }\n  ]\n}"},"url":"{{base_url}}/entities/api/create_instance/format/json","description":"<p>Creates a new record in the specified entity.</p>\n<p>WARNING: The endpoint is create_instance, NOT create.</p>\n<p>Key Rules:</p>\n<ul>\n<li>form_data is an array of group objects</li>\n<li>Each group has group_data_name and data</li>\n<li>data must be an array with a SINGLE object containing all field key-value pairs</li>\n<li>Do NOT send separate objects per field — this causes block_number errors</li>\n<li>Phone fields require format XXX-XXXXXXX (e.g., 050-1234567). International formats (+972...), spaces, and parentheses are all rejected.</li>\n</ul>\n<p>Success response returns: { \"success\": \"ok\", \"results\": { \"_id\": \"...\" } }</p>\n","urlObject":{"path":["entities","api","create_instance","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"432d2d40-66d8-40b5-8166-95c92f2b7c70"},{"name":"Create Instance (Multiple Groups)","id":"76e21db8-be9d-4df0-9983-dc8d756aa33c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\",\n  \"form_data\": [\n    {\n      \"group_data_name\": \"g_1790\",\n      \"data\": [{ \"fld_11693\": \"John\", \"fld_11694\": \"Doe\" }]\n    },\n    {\n      \"group_data_name\": \"g_1791\",\n      \"data\": [{ \"fld_11703\": \"Some notes here\" }]\n    }\n  ]\n}"},"url":"{{base_url}}/entities/api/create_instance/format/json","description":"<p>Creates a record with data in multiple field groups. If your entity has more than one field group, include each group as a separate object in the form_data array. For example, a lead with both personal details and notes.</p>\n","urlObject":{"path":["entities","api","create_instance","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"76e21db8-be9d-4df0-9983-dc8d756aa33c"}],"id":"a57fdca9-b661-4d89-9eab-5627f591e304","description":"<p>Creates a new record (called an \"instance\") in a given entity. You provide the data organized by field groups — each group bundles related fields together (e.g., \"Lead Details\", \"Address Info\"). The response returns the new record's _id, which you'll need for subsequent updates or deletions.</p>\n","_postman_id":"a57fdca9-b661-4d89-9eab-5627f591e304"},{"name":"3. Read / Query Data","item":[{"name":"Select All Records","id":"06b11878-8c51-48e0-8cbf-7cbdd77d314e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\"\n}"},"url":"{{base_url}}/entities/api/instance_data/format/json","description":"<p>Fetches all records in the entity (up to the default page size of 500).</p>\n<p>Note: The endpoint is instance_data, NOT select, select_data, or get_data.</p>\n<p>The response contains three main sections: info (pagination metadata), entity_data (entity metadata), and data (the actual records). Each record's fields are nested inside field_groups → fields_data.</p>\n<p>Response structure notes:</p>\n<ul>\n<li>data is an array of instance objects</li>\n<li>field_groups is an array of group objects</li>\n<li>fields_data is a nested array: outer = repetitions (for repeatable groups), inner = field objects</li>\n<li>Each field object has a value property containing the actual data</li>\n</ul>\n","urlObject":{"path":["entities","api","instance_data","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"06b11878-8c51-48e0-8cbf-7cbdd77d314e"},{"name":"Select with Pagination","id":"e5831324-7525-4b69-ad54-ebd03c0a132e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\",\n  \"limit\": 10,\n  \"page\": 1\n}"},"url":"{{base_url}}/entities/api/instance_data/format/json","description":"<p>For large datasets, use limit and page to control how many records come back per request and which page you're on. The response info object tells you total_count, total_pages, and current_page_number.</p>\n","urlObject":{"path":["entities","api","instance_data","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"e5831324-7525-4b69-ad54-ebd03c0a132e"},{"name":"Select by ID","id":"b0d7a127-bedf-4826-9562-4b8e1a5051dc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\",\n  \"filter\": [[\"_id\", \"=\", \"{{instance_id}}\"]]\n}"},"url":"{{base_url}}/entities/api/instance_data/format/json","description":"<p>Fetch a single record by its _id using a filter. This is the most common way to look up a specific record after creating or updating it.</p>\n","urlObject":{"path":["entities","api","instance_data","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"b0d7a127-bedf-4826-9562-4b8e1a5051dc"},{"name":"Select with Filter","id":"611faeb5-6416-4b6b-8f35-cf465aa84901","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\",\n  \"filter\": [[\"fld_11693\", \"=\", \"John\"]]\n}"},"url":"{{base_url}}/entities/api/instance_data/format/json","description":"<p>Filter records by field value. Filters let you narrow down which records are returned.</p>\n<p>CRITICAL WARNING: Using the wrong filter format (e.g., an array of objects instead of array of arrays) will NOT throw an error — it silently returns ALL records unfiltered. This is one of the most common integration bugs.</p>\n<p>Filter syntax: array of arrays [[\"field_data_name\", \"operator\", \"value\"]]</p>\n<p>Available operators: =, &lt;, &lt;=, &gt;, &gt;=, like, not like, IN, NOT IN, EMPTY, NOT EMPTY</p>\n<p>Date operators: date_range, x_days_back, x_days_forward, today, yesterday, tomorrow, current_week, last_7_days, last_30_days</p>\n<p>OR logic: Use the andxor parameter alongside filter. Records matching either the filter OR the andxor conditions will be returned.</p>\n<p>Geo filter: [\"fld_location\", \"geo\", { \"lat\": 32.0853, \"lng\": 34.7818, \"radius\": 5 }]</p>\n","urlObject":{"path":["entities","api","instance_data","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"611faeb5-6416-4b6b-8f35-cf465aa84901"},{"name":"Select Including Archived","id":"798b6d53-1980-4d88-a0b7-8aa5121a02f1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\",\n  \"with_archive\": true\n}"},"url":"{{base_url}}/entities/api/instance_data/format/json","description":"<p>By default, archived records are excluded from results. Add with_archive: true to include them in the response. Archived records will have \"archived\": true in their instance_data.</p>\n","urlObject":{"path":["entities","api","instance_data","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"798b6d53-1980-4d88-a0b7-8aa5121a02f1"}],"id":"5fbc114a-ec9a-4cdf-855c-da683ad7e0be","description":"<p>Retrieves records from an entity. You can fetch all records, paginate through large datasets, filter by specific criteria, or look up a single record by its _id. The response includes pagination info, entity metadata, and the full field data for each matching record.</p>\n","_postman_id":"5fbc114a-ec9a-4cdf-855c-da683ad7e0be"},{"name":"4. Update Fields","item":[{"name":"Update Single Field","id":"0646b01f-1752-4355-802b-cb55c7b9bd7e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\",\n  \"filter\": [\n    [\"_id\", \"=\", \"{{instance_id}}\"]\n  ],\n  \"field\": [\n    [\"fld_11693\", \"New First Name\", 0]\n  ]\n}"},"url":"{{base_url}}/entities/api/update_instance_fields/format/json","description":"<p>Updates a single field on a record.</p>\n<p>IMPORTANT: The update format uses filter + field arrays, NOT form_data. See the Common Mistakes section if you're getting unexpected results.</p>\n<p>Each field in the field array is a triplet: [field_data_name, new_value, group_index]. For regular (non-repeatable) groups, group_index is always 0.</p>\n<p>For repeatable groups (e.g., line items, contacts), the third element specifies which repetition to update. Index 0 is the first row, 1 is the second, and so on.</p>\n<p>Success response: { \"success\": \"ok\", \"results\": { \"instances_updated\": 1, \"fields_updated_total\": 1 } }</p>\n","urlObject":{"path":["entities","api","update_instance_fields","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"0646b01f-1752-4355-802b-cb55c7b9bd7e"},{"name":"Update Multiple Fields","id":"523ba0b6-1485-4698-8b37-b1c536f01ca6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\",\n  \"filter\": [[\"_id\", \"=\", \"{{instance_id}}\"]],\n  \"field\": [\n    [\"fld_11693\", \"Updated Name\", 0],\n    [\"fld_11694\", \"Updated Last\", 0],\n    [\"fld_11731\", \"newemail@example.com\", 0]\n  ]\n}"},"url":"{{base_url}}/entities/api/update_instance_fields/format/json","description":"<p>You can update several fields in a single call by adding more entries to the field array. Each entry follows the same triplet format: [field_data_name, new_value, group_index].</p>\n","urlObject":{"path":["entities","api","update_instance_fields","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"523ba0b6-1485-4698-8b37-b1c536f01ca6"}],"id":"7d9a1e00-442a-488c-951d-e75a064aa2b1","description":"<p>Modifies one or more field values on existing records. You identify which records to update using a filter (typically by _id), then specify which fields to change. Note that the body format here is completely different from create — this is a common source of confusion.</p>\n","_postman_id":"7d9a1e00-442a-488c-951d-e75a064aa2b1"},{"name":"5. Remove Instance","item":[{"name":"Remove by IDs Array","id":"73385c1e-3ae0-48a7-8d35-b8fe14dce1d0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\",\n  \"_ids\": [\"{{instance_id}}\"]\n}"},"url":"{{base_url}}/entities/api/remove_instance/format/json","description":"<p>Deletes records by _ids array. This is the recommended approach and supports batch deletion — pass multiple IDs in the array to delete several records at once.</p>\n<p>Do NOT use instance_id — the delete endpoint doesn't accept it. Use _ids (an array) or filter instead.</p>\n","urlObject":{"path":["entities","api","remove_instance","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"73385c1e-3ae0-48a7-8d35-b8fe14dce1d0"},{"name":"Remove by Filter","id":"f82ee59a-c821-4fb0-967e-a763ee9bf90e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\",\n  \"filter\": [[\"_id\", \"=\", \"{{instance_id}}\"]]\n}"},"url":"{{base_url}}/entities/api/remove_instance/format/json","description":"<p>Alternative: delete records using the same filter syntax as in queries. Be careful — if your filter matches multiple records, they will all be permanently deleted.</p>\n","urlObject":{"path":["entities","api","remove_instance","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"f82ee59a-c821-4fb0-967e-a763ee9bf90e"}],"id":"59b0839d-0ef0-4c7e-b7f6-b6e347914457","description":"<p>Permanently deletes one or more records from an entity. This action cannot be undone — if you want to hide records without deleting them, use the Archive endpoint instead. There are two ways to specify which records to delete: by _ids array or by filter.</p>\n","_postman_id":"59b0839d-0ef0-4c7e-b7f6-b6e347914457"},{"name":"6. Repeatable Groups","item":[{"name":"Add Group Repetition","id":"b1c2e571-8661-48c2-84c2-e03ccca1ae7b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\",\n  \"group_data\" : {\n    \"field_data_name\" : \"value\",\n    ...\n  }\n  \"_id\": \"{{instance_id}}\",\n  \"group_data_name\": \"g_repeatable_group\"\n}"},"url":"{{base_url}}/entities/api/add_group_repetition/format/json","description":"<p>Adds a new empty row to a repeatable group on a specific record. After adding it, use update_instance_fields with the appropriate group_index to populate the fields.</p>\n<p>Note: Uses _id (not instance_id or filter).</p>\n","urlObject":{"path":["entities","api","add_group_repetition","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"b1c2e571-8661-48c2-84c2-e03ccca1ae7b"},{"name":"Remove Group Repetition","id":"7b982c48-5f27-4922-bef5-daa1099ef3b0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\",\n  \"_id\": \"{{instance_id}}\",\n  \"group_data_name\": \"g_repeatable_group\",\n  \"index\": 0\n}"},"url":"{{base_url}}/entities/api/remove_group_repetition/format/json","description":"<p>Deletes a specific row from a repeatable group. The index is 0-based, so 0 removes the first repetition, 1 removes the second, etc. Remaining rows will shift down to fill the gap.</p>\n","urlObject":{"path":["entities","api","remove_group_repetition","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"7b982c48-5f27-4922-bef5-daa1099ef3b0"}],"id":"ea3dd98b-abbd-4ab3-b5dd-439e998e8927","description":"<p>Repeatable groups are like sub-tables within a record — think line items on an order, multiple phone numbers for a contact, or work history entries. Before you can populate fields in a new repetition, you need to add the repetition first, then use the Update endpoint to fill in its fields.</p>\n","_postman_id":"ea3dd98b-abbd-4ab3-b5dd-439e998e8927"},{"name":"7. File Upload","item":[{"name":"Upload File","id":"7944c8f2-a2e2-4fda-a693-11ae03402a3c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"username","value":"{{username}}","type":"text"},{"key":"api_secret","value":"{{api_secret}}","type":"text"},{"key":"entity_data_name","value":"{{entity_data_name}}","type":"text"},{"key":"instance_id","value":"{{instance_id}}","type":"text"},{"key":"field_data_name","value":"fld_11719","type":"text"},{"key":"file","type":"file","value":""}]},"url":"{{base_url}}/entities/api/upload_file/format/json","description":"<p>Uploads a file to a file-type field on an existing record. This is the only endpoint that uses multipart form data instead of JSON. Make sure to include instance_id and field_data_name to specify exactly which record and field the file should be attached to.</p>\n","urlObject":{"path":["entities","api","upload_file","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"7944c8f2-a2e2-4fda-a693-11ae03402a3c"}],"id":"2b432b2d-d27d-4d88-8b29-21f991b34715","description":"<p>Attaches a file to a file-type field on an existing record. Unlike other endpoints which use JSON, this one requires multipart form data encoding. The file will be stored in Origami's file system and linked to the specified field.</p>\n","_postman_id":"2b432b2d-d27d-4d88-8b29-21f991b34715"},{"name":"8. Archive","item":[{"name":"Archive Record","id":"694e2497-fdd2-44fb-8ac8-efe17ea5820f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\",\n  \"id\": \"{{instance_id}}\",\n  \"type\": \"in\"\n}"},"url":"{{base_url}}/entities/api/archive_action","description":"<p>Moves a record to the archive. The record will no longer appear in standard queries.</p>\n<p>Key differences from other endpoints:</p>\n<ul>\n<li>URL does NOT end with /format/json</li>\n<li>Uses \"id\" (not \"_id\", \"instance_id\", or \"filter\")</li>\n<li>type is \"in\" (archive) or \"out\" (unarchive)</li>\n</ul>\n","urlObject":{"path":["entities","api","archive_action"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"694e2497-fdd2-44fb-8ac8-efe17ea5820f"},{"name":"Unarchive Record","id":"df13702b-e167-49f6-997a-57bff89ce4ae","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\",\n  \"id\": \"{{instance_id}}\",\n  \"type\": \"out\"\n}"},"url":"{{base_url}}/entities/api/archive_action","description":"<p>Restores a previously archived record back to active status. Same endpoint as archive, but with type set to \"out\" instead of \"in\".</p>\n","urlObject":{"path":["entities","api","archive_action"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"df13702b-e167-49f6-997a-57bff89ce4ae"}],"id":"7d1292d5-93a7-4b16-ae65-724b0a381398","description":"<p>Archiving is a soft-delete mechanism — the record is hidden from normal queries but not permanently removed. You can archive and unarchive records at any time. Archived records can still be retrieved by adding with_archive: true to your query (see Read / Query section).</p>\n","_postman_id":"7d1292d5-93a7-4b16-ae65-724b0a381398"},{"name":"9. Calendar Events","item":[{"name":"Create with Calendar Event","id":"ae875d35-c384-4fb5-b5fa-882b30577c1e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\",\n  \"form_data\": [\n    {\n      \"group_data_name\": \"origami_calendar_group\",\n      \"data\": [\n        {\n          \"origami_calendar_field\": {\n            \"all_day\": \"0\",\n            \"start\": \"2026-03-27 09:00\",\n            \"end\": \"2026-03-27 10:30\"\n          }\n        }\n      ]\n    }\n  ]\n}"},"url":"{{base_url}}/entities/api/create_instance/format/json","description":"<p>Creates a new record with an associated calendar event. The origami_calendar_field object accepts: all_day (\"0\" or \"1\"), start (\"YYYY-MM-DD HH:mm\"), end (\"YYYY-MM-DD HH:mm\"). You can include additional field groups alongside the calendar group in the same form_data array.</p>\n","urlObject":{"path":["entities","api","create_instance","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"ae875d35-c384-4fb5-b5fa-882b30577c1e"},{"name":"Create Calendar Event (All-Day with Extra Fields)","id":"77ea2c57-bbb5-498d-957c-6b0b33f6600e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"{{entity_data_name}}\",\n  \"form_data\": [\n    {\n      \"group_data_name\": \"origami_calendar_group\",\n      \"data\": [\n        {\n          \"origami_calendar_field\": {\n            \"all_day\": \"1\",\n            \"start\": \"2026-04-01\",\n            \"end\": \"2026-04-01\"\n          }\n        }\n      ]\n    },\n    {\n      \"group_data_name\": \"<your_details_group>\",\n      \"data\": [\n        {\n          \"fld_XXX\": \"Meeting with client\",\n          \"fld_YYY\": \"Confirmed\"\n        }\n      ]\n    }\n  ]\n}"},"url":"{{base_url}}/entities/api/create_instance/format/json","description":"<p>Creates an all-day calendar event with additional field groups. Shows how to pass multiple groups in form_data. Replace group_data_name and fld_XXX with your actual entity field names (use Entity Structure endpoint to discover them).</p>\n","urlObject":{"path":["entities","api","create_instance","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"77ea2c57-bbb5-498d-957c-6b0b33f6600e"}],"id":"77521e75-5094-4387-8e8e-2c84fc5b5028","description":"<p>Origami entities can have a built-in calendar group that stores event data (date, time, all-day flag). Calendar events don't have their own separate API — they use the standard Create and Update endpoints, but with a special group called origami_calendar_group. The origami_calendar_field is a JSON object with: all_day (\"0\" for timed, \"1\" for all-day), start (date+time string), and end (date+time string).</p>\n","_postman_id":"77521e75-5094-4387-8e8e-2c84fc5b5028"},{"name":"10. Protected Entities","item":[{"name":"Select Protected Entity Data","id":"50d369cd-8435-4af4-897e-5f2d2d2ecfd6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"entity_data_name\": \"origami_users\"\n}"},"url":"{{base_url}}/entities/api/instance_data_protected/format/json","description":"<p>Works just like the regular instance_data endpoint, but uses instance_data_protected in the URL. Supports the same filters, pagination, and response format.</p>\n<p>You can filter protected entities the same way as regular entities — for example, looking up a specific user by their _id. The origami_users entity is always a protected entity.</p>\n","urlObject":{"path":["entities","api","instance_data_protected","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"50d369cd-8435-4af4-897e-5f2d2d2ecfd6"}],"id":"1a4c6c74-cc4c-44f2-8305-84094b22a563","description":"<p>Some entities in Origami are marked as \"protected\" — most notably the origami_users entity that stores user accounts. These entities require a different read endpoint. You can check whether an entity is protected by looking at the protected_entity field in the entities_list response.</p>\n","_postman_id":"1a4c6c74-cc4c-44f2-8305-84094b22a563"},{"name":"11. Push Notifications","item":[{"name":"Send Push Notification","id":"25027ef7-7990-4d83-a405-8dc201dc5a7b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"user_id\": \"62cbb8b3c86ecd372a387235\",\n  \"text\": \"Hello There\",\n  \"duration\": \"10\",\n  \"id\": \"1111\",\n  \"button\": {\n    \"text\": \"Click me\",\n    \"type\": \"location\"\n  }\n}"},"url":"{{base_url}}/ui/api/push_notification","description":"<p>Sends a push notification to an Origami user.</p>\n<p>Key differences from other endpoints:</p>\n<ul>\n<li>Uses /ui/api/ base path, NOT /entities/api/</li>\n<li>Requires Content-Type: application/json header</li>\n<li>user_id is the Origami user ID to send the notification to</li>\n<li>duration is in seconds</li>\n<li>button is optional — adds an interactive button to the notification</li>\n</ul>\n","urlObject":{"path":["ui","api","push_notification"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"25027ef7-7990-4d83-a405-8dc201dc5a7b"}],"id":"c1e1bef0-67ad-48b8-af38-9936113c9187","description":"<p>Sends a real-time notification to a specific Origami user. This is useful for alerting users about events, approvals, or tasks that need attention. The notification appears in the user's Origami interface and can optionally include an interactive button.</p>\n<p>Note: This endpoint uses a completely different base path (/ui/api/) than all other endpoints.</p>\n","_postman_id":"c1e1bef0-67ad-48b8-af38-9936113c9187"},{"name":"12. Invoice System","item":[{"name":"Create Tax Invoice Receipt","id":"44361be5-052d-4adf-b8cf-8e271e437684","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"type\": \"tax_receipt\",\n  \"saved_id\": \"\",\n  \"round_total\": 0,\n  \"form_data\": [\n    {\n      \"group_data_name\": \"origami_invoices_general_details\",\n      \"data\": [\n        {\n          \"<FIELD_DATA_NAME>\": \"<VALUE>\"\n        }\n      ]\n    }\n  ]\n}"},"url":"{{base_url}}/invoices/api/create_invoice","description":"<p>Creates a Tax Invoice Receipt (חשבונית מס קבלה) — the most common document type in Israel. Uses the origami_invoices_general_details group for form data.</p>\n<p>type: tax_receipt\ngroup_data_name: origami_invoices_general_details</p>\n<p>Origami automatically assigns a sequential document number and creates a PDF. Success response includes _id, file_id (for the PDF), and doc_number.</p>\n","urlObject":{"path":["invoices","api","create_invoice"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"44361be5-052d-4adf-b8cf-8e271e437684"},{"name":"Create Tax Invoice","id":"85d9310d-289b-437d-9eae-6516a715be60","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"type\": \"tax_invoice\",\n  \"saved_id\": \"\",\n  \"round_total\": 0,\n  \"form_data\": [\n    {\n      \"group_data_name\": \"origami_invoices_general_details\",\n      \"data\": [{}]\n    }\n  ]\n}"},"url":"{{base_url}}/invoices/api/create_invoice","description":"<p>Creates a Tax Invoice (חשבונית מס) — a tax invoice without a receipt component.</p>\n<p>type: tax_invoice\ngroup_data_name: origami_invoices_general_details</p>\n<p>IMPORTANT: All invoice types use the same group_data_name — all five invoice types use origami_invoices_general_details.</p>\n","urlObject":{"path":["invoices","api","create_invoice"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"85d9310d-289b-437d-9eae-6516a715be60"},{"name":"Create Receipt","id":"7e5e0e0a-e15e-49d2-a7b9-5532af1e58c1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"type\": \"receipt\",\n  \"saved_id\": \"\",\n  \"round_total\": 0,\n  \"form_data\": [\n    {\n      \"group_data_name\": \"origami_invoices_general_details\",\n      \"data\": [{}]\n    }\n  ]\n}"},"url":"{{base_url}}/invoices/api/create_invoice","description":"<p>Creates a Receipt (קבלה).</p>\n<p>type: receipt\ngroup_data_name: origami_invoices_general_details</p>\n","urlObject":{"path":["invoices","api","create_invoice"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"7e5e0e0a-e15e-49d2-a7b9-5532af1e58c1"},{"name":"Create Proforma Invoice","id":"bc2b2525-89b8-4c6b-ba18-5bb52ef3ac7a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"type\": \"deal_invoice\",\n  \"saved_id\": \"\",\n  \"round_total\": 0,\n  \"form_data\": [\n    {\n      \"group_data_name\": \"origami_invoices_general_details\",\n      \"data\": [{}]\n    }\n  ]\n}"},"url":"{{base_url}}/invoices/api/create_invoice","description":"<p>Creates a Proforma Invoice (הצעת מחיר).</p>\n<p>type: deal_invoice\ngroup_data_name: origami_invoices_general_details</p>\n","urlObject":{"path":["invoices","api","create_invoice"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"bc2b2525-89b8-4c6b-ba18-5bb52ef3ac7a"},{"name":"Create Credit Invoice","id":"50032d17-ed92-4280-b8cf-426dd7c57281","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"type\": \"refund_invoice\",\n  \"attach_type\": \"tax_invoice\",\n  \"saved_id\": \"\",\n  \"round_total\": 0,\n  \"form_data\": [\n    {\n      \"group_data_name\": \"origami_invoices_general_details\",\n      \"data\": [{}]\n    }\n  ]\n}"},"url":"{{base_url}}/invoices/api/create_invoice","description":"<p>Creates a Credit Invoice / Refund (חשבונית זיכוי) — a credit note that references an existing invoice. Requires an additional attach_type parameter to specify which type of invoice is being credited.</p>\n<p>type: refund_invoice\nattach_type: tax_invoice (or other invoice type being credited)\ngroup_data_name: origami_invoices_general_details</p>\n","urlObject":{"path":["invoices","api","create_invoice"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"50032d17-ed92-4280-b8cf-426dd7c57281"},{"name":"Select Tax Invoice Receipts","id":"cfa8db75-4ac2-4bd7-a048-6d42424c8acc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"invoice_type\": \"tax_receipt\"\n}"},"url":"{{base_url}}/invoices/api/instance_data/format/json","description":"<p>Retrieves Tax Invoice Receipt records. The response format is the same as entity instance_data — with info (pagination), entity_data, and data arrays.</p>\n<p>invoice_type values for all types: tax_receipt, tax_invoice, receipt, deal_invoice, refund_invoice</p>\n<p>Supports the same filter and pagination parameters as entity queries.</p>\n","urlObject":{"path":["invoices","api","instance_data","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"cfa8db75-4ac2-4bd7-a048-6d42424c8acc"},{"name":"Select Tax Invoices","id":"8b542032-b4a1-4db0-82b9-378f4accba2b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"invoice_type\": \"tax_invoice\"\n}"},"url":"{{base_url}}/invoices/api/instance_data/format/json","description":"<p>Retrieves Tax Invoice records. Same response format and filtering as entity instance_data.</p>\n","urlObject":{"path":["invoices","api","instance_data","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"8b542032-b4a1-4db0-82b9-378f4accba2b"},{"name":"Select Receipts","id":"6d646a7f-a896-4bb1-b1da-cb9c0282627a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"invoice_type\": \"receipt\"\n}"},"url":"{{base_url}}/invoices/api/instance_data/format/json","description":"<p>Retrieves Receipt records. Same response format and filtering as entity instance_data.</p>\n","urlObject":{"path":["invoices","api","instance_data","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"6d646a7f-a896-4bb1-b1da-cb9c0282627a"},{"name":"Select Proforma Invoices","id":"ef28679c-c617-4ef7-8112-21df597069a6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"invoice_type\": \"deal_invoice\"\n}"},"url":"{{base_url}}/invoices/api/instance_data/format/json","description":"<p>Retrieves Proforma Invoice records. Same response format and filtering as entity instance_data.</p>\n","urlObject":{"path":["invoices","api","instance_data","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"ef28679c-c617-4ef7-8112-21df597069a6"},{"name":"Select Credit Invoices","id":"112d35af-3442-4ea3-8d69-d5d45b5f26b3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"{{username}}\",\n  \"api_secret\": \"{{api_secret}}\",\n  \"invoice_type\": \"refund_invoice\"\n}"},"url":"{{base_url}}/invoices/api/instance_data/format/json","description":"<p>Retrieves Credit Invoice / Refund records. Same response format and filtering as entity instance_data.</p>\n","urlObject":{"path":["invoices","api","instance_data","format","json"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"112d35af-3442-4ea3-8d69-d5d45b5f26b3"}],"id":"86ec4267-90f4-4cbe-8c90-70185f08130b","description":"<p>Origami includes a built-in invoicing module that supports five document types: Tax Invoice Receipt, Tax Invoice, Receipt, Proforma Invoice, and Credit Invoice. The invoice API lives on a completely separate base path (/invoices/api/) from the entity API — this is the most common source of confusion when integrating with invoicing for the first time.</p>\n<p>All five invoice types share just two endpoints: one for creating and one for querying. The type parameter determines which kind of document you're working with.</p>\n","_postman_id":"86ec4267-90f4-4cbe-8c90-70185f08130b"},{"name":"MCP Server","item":[{"name":"Connect Using GET Authentication","id":"0b6c6b54-3d6a-4b35-a66d-4a783430b89d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":""},"url":"https://<ACCOUNT_NAME>.origami.ms/mcp/?username=<ACCOUNT_USERNAME>&api_secret=<ACCOUNT_SECRET>","description":"<p>Connect to Origami MCP using GET Method</p>\n","urlObject":{"protocol":"https","path":["mcp",""],"host":["<ACCOUNT_NAME>","origami","ms"],"query":[{"key":"username","value":"<ACCOUNT_USERNAME>"},{"key":"api_secret","value":"<ACCOUNT_SECRET>"}],"variable":[]}},"response":[],"_postman_id":"0b6c6b54-3d6a-4b35-a66d-4a783430b89d"},{"name":"Connect Using HEADERS Authentication","id":"74ec179e-b476-44f2-be1e-0eb8ffd70a6a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"username","value":"<ACCOUNT_USERNAME>","type":"text"},{"key":"api_secret","value":"<ACCOUNT_SECRET>","type":"text"}],"url":"https://<ACCOUNT_NAME>.origami.ms/mcp/","description":"<p>Connect to Origami MCP using HEADERS Auth Method</p>\n","urlObject":{"protocol":"https","path":["mcp",""],"host":["<ACCOUNT_NAME>","origami","ms"],"query":[],"variable":[]}},"response":[],"_postman_id":"74ec179e-b476-44f2-be1e-0eb8ffd70a6a"},{"name":"Connect Using Basic Auth","id":"6d548728-47a2-4cdd-b0b3-a3e4117e172a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"basic","basic":{"basicConfig":[{"key":"username","value":"<ACCOUNT_USERNAME>"},{"key":"password","value":"<ACCOUNT_SECRET>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://<ACCOUNT_NAME>.origami.ms/mcp/","description":"<p>Connect to Origami MCP using Basic Auth Method</p>\n","urlObject":{"protocol":"https","path":["mcp",""],"host":["<ACCOUNT_NAME>","origami","ms"],"query":[],"variable":[]}},"response":[],"_postman_id":"6d548728-47a2-4cdd-b0b3-a3e4117e172a"}],"id":"7f358972-9833-4c39-9ab5-6fdb3a6fdf05","description":"<p>Origami MCP Server enables LLM models to securely interact with Origami account data. It provides APIs for retrieving, adding, and updating data, allowing seamless integration of AI capabilities into your system’s workflows.</p>\n<p>Available Tools:</p>\n<ul>\n<li><p><strong>get_entities_list</strong> – Get a list of all entities in the Origami system</p>\n</li>\n<li><p><strong>get_entity_structure</strong> – Get the structure of a specific entity in the Origami system</p>\n</li>\n<li><p><strong>get_instance_data</strong> – Get data from instances in the Origami system with flexible filtering and options</p>\n</li>\n<li><p><strong>create_instance</strong> – Create a new instance in the Origami system with support for regular and repeatable groups</p>\n</li>\n<li><p><strong>update_instance_fields</strong> – Update fields in an instance in the Origami system</p>\n</li>\n<li><p><strong>add_group_repetition</strong> – Add a new repetition of a repeatable group to an existing instance</p>\n</li>\n<li><p><strong>remove_group_repetition</strong> – Remove a repetition of a repeatable group from an existing instance</p>\n</li>\n<li><p><strong>archive_action</strong> – Archive an entity or instance in the Origami system</p>\n</li>\n</ul>\n","_postman_id":"7f358972-9833-4c39-9ab5-6fdb3a6fdf05"}],"event":[{"listen":"prerequest","script":{"id":"dd1d6a42-3bb6-48e1-9b17-3be1e9383a45","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"72bfae75-205e-43c3-87cc-8793b204b84e","type":"text/javascript","exec":[""]}}],"variable":[{"key":"ACCOUNT NAME","value":"<ACCOUNT_NAME>","type":"string"},{"key":"origami_username","value":"<ACCOUNT_USERNAME>","type":"string"},{"key":"Origami_Secret","value":"<ACCOUNT_SECRET>","type":"string"}]}