{"info":{"_postman_id":"9a502a2b-5a76-47cd-8245-b1a57385210c","name":"EXPENSIFY POSTMAN COLLECTION","description":"<html><head></head><body><p>This Postman collection provides a comprehensive overview of the Expensify Integration Server endpoints. It offers all the information you need to integrate your application with Expensify's functionalities.</p>\n<p><strong>The collection includes requests for:</strong></p>\n<ul>\n<li><p>Programmatically downloading expense report data for analysis or import into your accounting system.</p>\n</li>\n<li><p>Provisioning accounts for new employees.</p>\n</li>\n<li><p>And many more functionalities offered by the Expensify API.</p>\n</li>\n</ul>\n<p><strong>The Expensify API is a self-service tool, but you can also find valuable discussions about API usage on the</strong> <a href=\"https://community.expensify.com/discussion/5280/how-to-find-resources-for-using-expensify\">Expensify community forum.</a></p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"28050470","collectionId":"9a502a2b-5a76-47cd-8245-b1a57385210c","publishedId":"2sA35D74CW","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2024-03-27T00:06:59.000Z"},"item":[{"name":"AUTHENTICATION","item":[],"id":"9c0fbba4-0476-4fe5-a8ac-f561e4f077eb","description":"<p>To use the API, you will need to generate API credentials.</p>\n<ol>\n<li><p>Create an Expensify account at <a href=\"https://www.expensify.com/\">https://www.expensify.com/</a></p>\n</li>\n<li><p>Go to <a href=\"https://www.expensify.com/tools/integrations/\">https://www.expensify.com/tools/integrations/</a></p>\n</li>\n<li><p>A pair of credentials: <code>partnerUserID</code> and <code>partnerUserSecret</code> will be generated and shown on the page.</p>\n</li>\n</ol>\n","_postman_id":"9c0fbba4-0476-4fe5-a8ac-f561e4f077eb"},{"name":"REQUEST FORMAT","item":[],"id":"40b70bae-c072-45f6-b738-f71dca58cf2c","description":"<p>Every request to the Expensify API follows the same pattern: a JSON payload that identifies the job to execute is passed as a parameter called <code>requestJobDescription</code>. Additionally, other parameters may be needed based on the type of job.</p>\n<p>Finally, there is a general rate limit of 50 jobs started per minute. Exceeding this limit will result in the following error message: <code>You have been rate-limited. Please try again later or contact help@expensify.com for assistance.</code></p>\n<p>Every request has to be made against the endpoint <code>https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations</code>.</p>\n<p><strong>Request Job Description format</strong></p>\n<p>For every request, the <code>requestJobDescription</code> JSON parameter needs to contain the following data:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>PARAMETER</th>\n<th>TYPE</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>type</td>\n<td>String</td>\n<td>The type of job to execute.</td>\n</tr>\n<tr>\n<td>credentials</td>\n<td>JSON object</td>\n<td>An object containing two key-values used to authenticate you:  <br />* partnerUserID</td>\n</tr>\n<tr>\n<td></td>\n<td></td>\n<td>* partnerUserSecret</td>\n</tr>\n<tr>\n<td>inputSettings</td>\n<td>JSON Object</td>\n<td>(Optional) Additional settings specific to the job type. Refer to the Expensify API documentation for details on supported inputSettings for each job.</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"40b70bae-c072-45f6-b738-f71dca58cf2c"},{"name":"ENDPOINTS","item":[{"name":"EXPORT","item":[{"name":"Report Exporter","item":[{"name":"Export Report","id":"086beb96-7d3d-4bc3-bbe3-b16c76b1cb23","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"basic","basic":{"basicConfig":[{"key":"username","value":"{{partnerUserID}}"},{"key":"password","value":"{{partnerUserID}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n        \"type\":\"file\",\n        \"credentials\":{\n            \"partnerUserID\":{{partnerUserID}},\n            \"partnerUserSecret\":{{partnerUserSecret}}\n        },\n        \"onReceive\":{\n            \"immediateResponse\":[\"returnRandomFileName\"]\n        },\n        \"inputSettings\":{\n            \"type\":\"combinedReportData\",\n            \"filters\":{\n                \"reportIDList\": \"R00bCluvcO4T,R006AseGxMka\"\n            }\n        },\n        \"outputSettings\":{\n            \"fileExtension\":\"csv\"\n        }\n    }' \\\n    --data-urlencode 'template@expensify_template.ftl'","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations","urlObject":{"protocol":"https","path":["Integration-Server","ExpensifyIntegrations"],"host":["integrations","expensify","com"],"query":[],"variable":[]}},"response":[{"id":"bc25c4f6-7313-4e4b-9d26-a3a82e016016","name":"Export reports by ID, to a CSV file","originalRequest":{"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n        \"type\":\"file\",\n        \"credentials\":{\n            \"partnerUserID\":{{partnerUserID}},\n            \"partnerUserSecret\":{{partnerUserSecret}}\n        },\n        \"onReceive\":{\n            \"immediateResponse\":[\"returnRandomFileName\"]\n        },\n        \"inputSettings\":{\n            \"type\":\"combinedReportData\",\n            \"filters\":{\n                \"reportIDList\": \"R00bCluvcO4T,R006AseGxMka\"\n            }\n        },\n        \"outputSettings\":{\n            \"fileExtension\":\"csv\"\n        }\n    }' \\\n    --data-urlencode 'template@expensify_template.ftl'","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations"},"status":"OK","code":200,"_postman_previewlanguage":"plain","header":[{"key":"Server","value":"nginx"},{"key":"Date","value":"Wed, 27 Mar 2024 06:51:12 GMT"},{"key":"Content-Type","value":"text/plain;charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  4.1.1  Java/Private Build/1.8)"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Allow-Methods","value":"OPTIONS, GET, POST"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"origin-when-cross-origin"},{"key":"Content-Security-Policy","value":"frame-ancestors https://www.expensify.com https://staging.expensify.com https://integrations.expensify.com"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\r\n    \"responseCode\": 200\r\n}"},{"id":"8fa6d588-5bf0-4c1b-95ce-9562f1f9f1f5","name":"Export Approved And Reimbursed Reports to A XLSX File","originalRequest":{"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n        \"type\":\"file\",\n        \"credentials\":{\n            \"partnerUserID\":\"_REPLACE_\",\n            \"partnerUserSecret\":\"_REPLACE_\"\n        },\n        \"onReceive\":{\n            \"immediateResponse\":[\"returnRandomFileName\"]\n        },\n        \"inputSettings\":{\n            \"type\":\"combinedReportData\",\n            \"filters\":{\n                \"reportIDList\": \"R00bCluvcO4T,R006AseGxMka\"\n            }\n        },\n        \"outputSettings\":{\n            \"fileExtension\":\"csv\"\n        }\n    }' \\\n    --data-urlencode 'template@expensify_template.ftl'\nExport at most 10 Approved and Reimbursed reports generated between 2016-01-01 and 2016-02-01 to an xlsx file named myExport.xlsx. The exported reports are then marked as exported with the label \"Expensify Export\" (markAsExported action), and an email with a link to the output is sent. Reports that have already been marked with the label \"Expensify Export\" are ignored (markedAsExported filter)\ncurl -X POST 'https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations' \\\n    -d 'requestJobDescription={\n        \"type\":\"file\",\n        \"credentials\":{\n            \"partnerUserID\":{{partnerUserID}},\n            \"partnerUserSecret\":{{partnerUserID}}\n        },\n        \"onReceive\":{\n            \"immediateResponse\":[\"returnRandomFileName\"]\n        },\n        \"inputSettings\":{\n            \"type\":\"combinedReportData\",\n            \"reportState\":\"APPROVED,REIMBURSED\",\n            \"limit\":\"10\",\n            \"filters\":{\n                \"startDate\":\"2016-01-01\",\n                \"endDate\":\"2016-02-01\",\n                \"markedAsExported\":\"Expensify Export\"\n            }\n        },\n        \"outputSettings\":{\n            \"fileExtension\":\"xlsx\",\n            \"fileBasename\":\"myExport\"\n        },\n        \"onFinish\":[\n            {\"actionName\":\"markAsExported\",\"label\":\"Expensify Export\"},\n            {\"actionName\":\"email\",\"recipients\":\"manager@domain.com,finances@domain.com\", \"message\":\"Report is ready.\"}\n        ]\n    }' \\\n    --data-urlencode 'template@expensify_template.ftl'","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations"},"status":"OK","code":200,"_postman_previewlanguage":"plain","header":[{"key":"Server","value":"nginx"},{"key":"Date","value":"Wed, 27 Mar 2024 07:27:10 GMT"},{"key":"Content-Type","value":"text/plain;charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  4.1.1  Java/Private Build/1.8)"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Allow-Methods","value":"OPTIONS, GET, POST"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"origin-when-cross-origin"},{"key":"Content-Security-Policy","value":"frame-ancestors https://www.expensify.com https://staging.expensify.com https://integrations.expensify.com"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\r\n    \"responseCode\": 200\r\n}\r\n\r\n The exported reports are then marked as exported with the label \"Expensify Export\" (markAsExported action), and an email with a link to the output is sent. Reports that have already been marked with the label \"Expensify Export\" are ignored (markedAsExported filter)"}],"_postman_id":"086beb96-7d3d-4bc3-bbe3-b16c76b1cb23"}],"id":"265c538a-5468-4bb5-8e35-7901aea90e9c","description":"<p>Export expense or report data in a configurable format for analysis or insertion into your accounting package. See the <a href=\"https://integrations.expensify.com/Integration-Server/doc/export_report_template.html\">export template format reference</a> for more information about how to write export templates.</p>\n<h3 id=\"requestjobdescription-format\"><code>requestJobDescription</code> format</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>VALID VALUES</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>type</td>\n<td>String</td>\n<td>file</td>\n<td></td>\n</tr>\n<tr>\n<td>onReceive</td>\n<td>JSON object</td>\n<td><code>{\"immediateResponse\":[\"returnRandomFileName\"]}</code></td>\n<td>Returns the name of the generated report. Only this export mode is supported at the moment.</td>\n</tr>\n<tr>\n<td>inputSettings</td>\n<td>JSON object</td>\n<td>See inputSettings</td>\n<td>Settings used to filter the reports that are exported.</td>\n</tr>\n<tr>\n<td>outputSettings</td>\n<td>JSON object</td>\n<td>See outputSettings</td>\n<td>Settings for the generated file.</td>\n</tr>\n<tr>\n<td><strong>Optional elements</strong></td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>test</td>\n<td>String</td>\n<td>true, false</td>\n<td>If set to true, actions defined in <code>onFinish</code> will not be executed.</td>\n</tr>\n<tr>\n<td>onFinish</td>\n<td>JSON array</td>\n<td>See onFinish</td>\n<td>Actions performed at the end of the export.</td>\n</tr>\n</tbody>\n</table>\n</div><ul>\n<li><code>inputSettings</code></li>\n</ul>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>VALID VALUES</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>type</td>\n<td>String</td>\n<td>combinedReportData</td>\n<td>Specifies all Expensify reports will be combined into a single file.</td>\n</tr>\n<tr>\n<td>filters</td>\n<td>JSON object</td>\n<td>See inputSettings filters</td>\n<td></td>\n</tr>\n<tr>\n<td><strong>Optional elements</strong></td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>reportState</td>\n<td>String</td>\n<td>One or more of <code>\"OPEN\"</code>, <code>\"SUBMITTED\"</code>, <code>\"APPROVED\"</code>, <code>\"REIMBURSED\"</code>, <code>\"ARCHIVED\"</code>.  <br />When using multiple statuses, separate them by a comma, <em>e.g.</em> <code>\"APPROVED,REIMBURSED\"</code>  <br /><strong>Note:</strong> These values respectively match the statuses \"Open\", \"Processing\", \"Approved\", \"Reimbursed\" and \"Closed\" on the website</td>\n<td>Only the reports matching the specified status(es) will be exported.</td>\n</tr>\n<tr>\n<td>limit</td>\n<td>String</td>\n<td>Any integer, as a string</td>\n<td>Maximum number of reports to export.</td>\n</tr>\n<tr>\n<td>employeeEmail</td>\n<td>String</td>\n<td>A valid email address  <br /><strong>Note:</strong>  <br />* The usage of this parameter is restricted to certain domains  <br />* If this parameter is used, reports in the OPEN status cannot be exported</td>\n<td>The reports will be exported from that account.</td>\n</tr>\n</tbody>\n</table>\n</div><ul>\n<li><code>inputSettings.filters</code></li>\n</ul>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>VALID VALUES</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>reportIDList</td>\n<td>String,  <br /><em>Required if</em> <code>_startDate_</code> <em>or</em> <code>_approvedAfter_</code> <em>are not specified</em></td>\n<td></td>\n<td>Comma-separated list of report IDs to be exported.</td>\n</tr>\n<tr>\n<td>policyIDList</td>\n<td>String,  <br /><em>Optional</em></td>\n<td></td>\n<td>Comma-separated list of policy IDs the exported reports must be under.</td>\n</tr>\n<tr>\n<td>startDate</td>\n<td>Date,  <br /><em>Required if</em> <code>_reportIDList_</code> <em>or</em> <code>_approvedAfter_</code> <em>are not specified</em></td>\n<td>yyyy-mm-dd formatted date</td>\n<td>Filters out all reports submitted or created before the given date, whichever occurred last (inclusive).</td>\n</tr>\n<tr>\n<td>endDate</td>\n<td>Date,  <br /><em>Optional</em></td>\n<td>yyyy-mm-dd formatted date</td>\n<td>Filters out all reports submitted or created after the given date, whichever occurred last (inclusive).</td>\n</tr>\n<tr>\n<td>approvedAfter</td>\n<td>Date,  <br /><em>Required if</em> <code>_reportIDList_</code> <em>or</em> <code>_startDate_</code> <em>are not specified</em></td>\n<td>yyyy-mm-dd formatted date</td>\n<td>Filters out all reports approved before, or on that date. This filter is only used against reports that have been approved.</td>\n</tr>\n<tr>\n<td>markedAsExported</td>\n<td>String,  <br /><em>Optional</em></td>\n<td>Any string</td>\n<td>Filters out reports that have already been exported with that label out.</td>\n</tr>\n</tbody>\n</table>\n</div><ul>\n<li><code>outputSettings</code></li>\n</ul>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>VALID VALUES</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>fileExtension</td>\n<td>String</td>\n<td>One or multiple of \"csv\", \"xls\", \"xlsx\", \"txt\", \"pdf\", \"json\", \"xml\"</td>\n<td>Specifies the format of the generated report.  <br /><em>Note</em>: if the \"pdf\" option is chosen, one PDF file will be generated for each report exported.</td>\n</tr>\n<tr>\n<td><strong>Optional elements</strong></td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>fileBasename</td>\n<td>String</td>\n<td>Any valid file base name</td>\n<td>The name of the generated file(s) will start with this value, and a random part will be added to make each filename globally unique. If not specified, the default value <code>export</code> is used.</td>\n</tr>\n<tr>\n<td>includeFullPageReceiptsPdf</td>\n<td>Boolean</td>\n<td><code>true</code>, <code>false</code></td>\n<td>Specifies whether generated PDFs should include full page receipts. This parameter is used only if <code>fileExtension</code> contains <code>pdf</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><ul>\n<li><code>onFinish</code> (Optional)</li>\n</ul>\n<p>This section can be used to describe actions that need to be performed at the end of the export.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>ACTION NAME</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>email</td>\n<td>Send an email linking to the generated report to a provided list of recipients.</td>\n</tr>\n<tr>\n<td>markAsExported</td>\n<td>Mark the exported reports as “Exported” in Expensify.</td>\n</tr>\n<tr>\n<td>sftpUpload</td>\n<td>upload the generated file(s) to an SFTP server.</td>\n</tr>\n</tbody>\n</table>\n</div><div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>VALID VALUES</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong><code>email</code></strong> action</td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>recipients</td>\n<td>String</td>\n<td>Comma-separated list of valid email addresses</td>\n<td>People to email at the end of the export.</td>\n</tr>\n<tr>\n<td>message</td>\n<td>String</td>\n<td>Plain text or Freemarker message</td>\n<td>Content of the message. If using Freemarker, the <code>filenames</code> list can be used to get the names of all files that have been generated.</td>\n</tr>\n<tr>\n<td><strong><code>markAsExported</code></strong> action</td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>label</td>\n<td>String</td>\n<td>Any string value</td>\n<td>The exported reports will be marked as exported with this label.</td>\n</tr>\n<tr>\n<td><strong><code>sftpUpload</code></strong> action</td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>sftpData</td>\n<td>JSON object</td>\n<td></td>\n<td>See below</td>\n</tr>\n<tr>\n<td><strong><code>sftpUpload.sftpData</code></strong> action</td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>host</td>\n<td>String</td>\n<td></td>\n<td>The SFTP host to connect to. You can upload to a specific folder by setting the <code>homedir</code> (home directory) of the SFTP user to that folder. You cannot specify a specific folder any other way.</td>\n</tr>\n<tr>\n<td>login</td>\n<td>String</td>\n<td></td>\n<td>The username to use for SFTP authentication.</td>\n</tr>\n<tr>\n<td>password</td>\n<td>String</td>\n<td></td>\n<td>The password to use during authentication.</td>\n</tr>\n<tr>\n<td>port</td>\n<td>Integer</td>\n<td></td>\n<td>The port to connect to on the SFTP server.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"template-parameter\">Template parameter</h3>\n<p>The <code>template</code> parameter is used to format the Expensify data as you wish. It is based on the Freemarker language's syntax.</p>\n<p>See the <a href=\"https://integrations.expensify.com/Integration-Server/doc/export_report_template.html\">export template format reference</a> for more information about how to write export templates.</p>\n<p>We recommend storing your template in separate files, which can be passed to the request more easily with cURL's `@` operator.</p>\n","_postman_id":"265c538a-5468-4bb5-8e35-7901aea90e9c"},{"name":"Downloader","item":[{"name":"Download Report","id":"a78fdfdc-eafd-4c9b-8422-c12acd39698b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"basic","basic":{"basicConfig":[{"key":"username","value":"{{partnerUserID}}"},{"key":"password","value":"{{partnerUserSecret}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n        \"type\":\"download\",\n        \"credentials\":{\n            \"partnerUserID\":{{partnerUserID}},\n            \"partnerUserSecret\":{{partnerUserSecret}}\n        },\n        \"fileName\":\"myFile.csv\",\n        \"fileSystem\":\"integrationServer\"\n    }'","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations","urlObject":{"protocol":"https","path":["Integration-Server","ExpensifyIntegrations"],"host":["integrations","expensify","com"],"query":[],"variable":[]}},"response":[{"id":"88b21eb3-0b8a-41e2-b4bf-2fe00f61f627","name":"Download Report","originalRequest":{"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n        \"type\":\"download\",\n        \"credentials\":{\n            \"partnerUserID\":{{partnerUserID}},\n            \"partnerUserSecret\":{{partnerUserSecret}}\n        },\n        \"fileName\":\"myFile.csv\",\n        \"fileSystem\":\"integrationServer\"\n    }'","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations"},"status":"OK","code":200,"_postman_previewlanguage":"plain","header":[{"key":"Server","value":"nginx"},{"key":"Date","value":"Wed, 27 Mar 2024 06:44:28 GMT"},{"key":"Content-Type","value":"text/plain;charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  4.1.1  Java/Private Build/1.8)"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Allow-Methods","value":"OPTIONS, GET, POST"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"origin-when-cross-origin"},{"key":"Content-Security-Policy","value":"frame-ancestors https://www.expensify.com https://staging.expensify.com https://integrations.expensify.com"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\r\n    \"responseCode\": 200\r\n}\r\n\r\n"}],"_postman_id":"a78fdfdc-eafd-4c9b-8422-c12acd39698b"}],"id":"2e91b561-9aad-4c86-8422-ebb7f82645b9","description":"<p>This table describes the structure of the response you receive when downloading reports using the Download Report endpoint.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Name</th>\n<th>Format</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>fileName</td>\n<td>String</td>\n<td>The name of the downloaded report file.</td>\n</tr>\n<tr>\n<td>Optional Elements</td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>fileSystem</td>\n<td>String</td>\n<td>(Optional) Specifies the report type.</td>\n</tr>\n<tr>\n<td></td>\n<td></td>\n<td>Valid values are:</td>\n</tr>\n<tr>\n<td></td>\n<td></td>\n<td><code>reconciliation</code> for reports generated by the Reconciliation job.</td>\n</tr>\n<tr>\n<td></td>\n<td></td>\n<td><code>integrationServer</code> (default) for reports generated by the Report Exporter job.</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"2e91b561-9aad-4c86-8422-ebb7f82645b9"}],"id":"b575101c-2341-4a51-aec5-47b5ce882627","_postman_id":"b575101c-2341-4a51-aec5-47b5ce882627","description":""},{"name":"CREATE","item":[{"name":"Report Creator","item":[{"name":"Create Report","id":"59162d63-c4c3-42f5-a49f-5394d4ba8d53","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","value":"application/x-www-form-urlencoded","type":"text"}],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n        \"type\": \"create\",\n        \"credentials\": {\n            \"partnerUserID\": {{partnerUserID}},\n            \"partnerUserSecret\":{{partnerUserSecret}}\n        },\n        \"inputSettings\": {\n            \"type\": \"report\",\n            \"policyID\": \"952DB91B963583C7\",\n            \"report\": {\n                \"title\": \"Name of the report\",\n                \"fields\":{\n                    \"reason_of_trip\": \"Business trip\",\n                    \"employees\": \"3\"\n                }\n            },\n            \"employeeEmail\": \"ifedolapo387@gmail.com\",\n            \"expenses\": [\n                {\n                    \"date\": \"2024-03-24\",\n                    \"currency\": \"USD\",\n                    \"merchant\": \"Name of merchant\",\n                    \"amount\": 1234\n                },\n                {\n                    \"date\": \"2024-03-27\",\n                    \"currency\": \"CAD\",\n                    \"merchant\": \"Name of merchant\",\n                    \"amount\": 2211\n                }\n            ]\n        }\n    }'","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations","urlObject":{"protocol":"https","path":["Integration-Server","ExpensifyIntegrations"],"host":["integrations","expensify","com"],"query":[],"variable":[]}},"response":[{"id":"cbc9e9cf-ff6e-48c8-8bb4-6b13566f4e12","name":"Create Report","originalRequest":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","value":"application/x-www-form-urlencoded","type":"text"}],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n        \"type\": \"create\",\n        \"credentials\": {\n            \"partnerUserID\": {{partnerUserID}},\n            \"partnerUserSecret\":{{partnerUserSecret}}\n        },\n        \"inputSettings\": {\n            \"type\": \"report\",\n            \"policyID\": \"952DB91B963583C7\",\n            \"report\": {\n                \"title\": \"Name of the report\",\n                \"fields\":{\n                    \"reason_of_trip\": \"Business trip\",\n                    \"employees\": \"3\"\n                }\n            },\n            \"employeeEmail\": \"ifedolapo387@gmail.com\",\n            \"expenses\": [\n                {\n                    \"date\": \"2024-03-24\",\n                    \"currency\": \"USD\",\n                    \"merchant\": \"Name of merchant\",\n                    \"amount\": 1234\n                },\n                {\n                    \"date\": \"2024-03-27\",\n                    \"currency\": \"CAD\",\n                    \"merchant\": \"Name of merchant\",\n                    \"amount\": 2211\n                }\n            ]\n        }\n    }'","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations"},"status":"OK","code":200,"_postman_previewlanguage":"plain","header":[{"key":"Server","value":"nginx"},{"key":"Date","value":"Wed, 27 Mar 2024 07:37:56 GMT"},{"key":"Content-Type","value":"text/plain;charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  4.1.1  Java/Private Build/1.8)"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Allow-Methods","value":"OPTIONS, GET, POST"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"origin-when-cross-origin"},{"key":"Content-Security-Policy","value":"frame-ancestors https://www.expensify.com https://staging.expensify.com https://integrations.expensify.com"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\r\n    \"responseCode\": 200,\r\n    \"reportName\": \"Name of the report\",\r\n    \"reportID\": \"R006AseGxMka\"\r\n}"}],"_postman_id":"59162d63-c4c3-42f5-a49f-5394d4ba8d53"}],"id":"3a9a8584-ed1f-43b7-b2ca-e2cf9beca88b","description":"<p>This section details creating a report within a user's Expensify account using the <code>requestJobDescription</code> format. However, this functionality requires prior enablement by Expensify Concierge.</p>\n<p><strong>Requirements:</strong></p>\n<ul>\n<li><p>Domain and Policy Admin permissions</p>\n</li>\n<li><p>Functionality enabled for your domain by contacting <a href=\"https://mailto:concierge@expensify.com\">concierge@expensify.com</a></p>\n</li>\n</ul>\n<p><strong>Error Handling:</strong></p>\n<p>If you encounter the \"Not authorized to authenticate as user\" error, it signifies report creation functionality is not enabled for your domain.</p>\n<p><strong>Request Format:</strong></p>\n<p>The request utilizes the <code>requestJobDescription</code> format with specific <code>inputSettings</code>. Here's a breakdown of the required fields:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field Name</th>\n<th>Format</th>\n<th>Valid Values</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>type</strong></td>\n<td>String</td>\n<td>\"report\"</td>\n<td>Specifies the job type as report creation.</td>\n</tr>\n<tr>\n<td><strong>employeeEmail</strong></td>\n<td>String</td>\n<td>A valid email address</td>\n<td>The report will be created in the corresponding user's account.</td>\n</tr>\n<tr>\n<td><strong>report</strong> (JSON Object)</td>\n<td></td>\n<td>See report details below.</td>\n<td>Defines report properties.</td>\n</tr>\n<tr>\n<td><strong>expenses</strong> (JSON Array)</td>\n<td></td>\n<td>See expenses details below.</td>\n<td>Defines expense details to be included in the report (optional).</td>\n</tr>\n<tr>\n<td><strong>policyID</strong></td>\n<td>String</td>\n<td>Any valid Expensify policy ID</td>\n<td>The report will be associated with this policy.</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>inputSettings.report Details:</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field Name</th>\n<th>Format</th>\n<th>Valid Values</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>title</strong></td>\n<td>String</td>\n<td></td>\n<td>The title of the report.</td>\n</tr>\n<tr>\n<td><strong>fields</strong> (Optional - JSON Object)</td>\n<td></td>\n<td>A series of key-value pairs.</td>\n<td>Defines values for custom fields on the specified policy (key names require underscores for non-alphanumeric characters).</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>inputSettings.expenses Details (Optional):</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field Name</th>\n<th>Format</th>\n<th>Valid Values</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>merchant</strong></td>\n<td>String</td>\n<td></td>\n<td>The merchant name for the expense.</td>\n</tr>\n<tr>\n<td><strong>currency</strong></td>\n<td>String</td>\n<td>Three-letter currency code (e.g., USD, EUR)</td>\n<td>The currency in which the expense was made.</td>\n</tr>\n<tr>\n<td><strong>date</strong></td>\n<td>Date</td>\n<td>yyyy-mm-dd format</td>\n<td>The date of the expense.</td>\n</tr>\n<tr>\n<td><strong>amount</strong></td>\n<td>Integer</td>\n<td></td>\n<td>The expense amount in cents.</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"3a9a8584-ed1f-43b7-b2ca-e2cf9beca88b"},{"name":"Expense Creator","item":[{"name":"Create Expense","id":"726086c1-f4c2-4a6d-a884-6a2cacab9260","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"basic","basic":{"basicConfig":[{"key":"username","value":"{{partnerUserID}}"},{"key":"password","value":"{{partnerUserSecret}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n        \"type\":\"create\",\n        \"credentials\":{\n            \"partnerUserID\":{{partnerUserID}},\n            \"partnerUserSecret\":{{partnerUserSecret}}\n        },\n        \"inputSettings\":{\n            \"type\":\"expenses\",\n            \"employeeEmail\":\"user@domain.com\",\n            \"transactionList\": [\n                {\n                    \"created\": \"2016-01-01\",\n                    \"currency\": \"USD\",\n                    \"merchant\": \"Name of merchant 1\",\n                    \"amount\": 1234\n                },\n                {\n                    \"created\": \"2016-01-21\",\n                    \"currency\": \"EUR\",\n                    \"merchant\": \"Name of merchant 2\",\n                    \"amount\": 2211,\n                    \"policyID\": \"E40D9B8DF456E233\",\n                    \"tax\": {\n                       \"rateID\":\"id_TAX_OPTION_16\"\n                    }\n                },\n                {\n                    \"created\": \"2016-01-31\",\n                    \"currency\": \"CAD\",\n                    \"merchant\": \"Name of merchant 3\",\n                    \"amount\": 2211,\n                    \"reportID\": \"R006AseGxMka\",\n                    \"tax\": {\n                        \"rateID\":\"id_TAX_OPTION_16\",\n                        \"amount\":600\n                    }\n                }\n            ]\n        }\n    }'","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations","urlObject":{"protocol":"https","path":["Integration-Server","ExpensifyIntegrations"],"host":["integrations","expensify","com"],"query":[],"variable":[]}},"response":[{"id":"2a948e97-43db-4e2a-9ce6-d5e99133f255","name":"Create Expense","originalRequest":{"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n        \"type\":\"create\",\n        \"credentials\":{\n            \"partnerUserID\":{{partnerUserID}},\n            \"partnerUserSecret\":{{partnerUserSecret}}\n        },\n        \"inputSettings\":{\n            \"type\":\"expenses\",\n            \"employeeEmail\":\"user@domain.com\",\n            \"transactionList\": [\n                {\n                    \"created\": \"2016-01-01\",\n                    \"currency\": \"USD\",\n                    \"merchant\": \"Name of merchant 1\",\n                    \"amount\": 1234\n                },\n                {\n                    \"created\": \"2016-01-21\",\n                    \"currency\": \"EUR\",\n                    \"merchant\": \"Name of merchant 2\",\n                    \"amount\": 2211,\n                    \"policyID\": \"E40D9B8DF456E233\",\n                    \"tax\": {\n                       \"rateID\":\"id_TAX_OPTION_16\"\n                    }\n                },\n                {\n                    \"created\": \"2016-01-31\",\n                    \"currency\": \"CAD\",\n                    \"merchant\": \"Name of merchant 3\",\n                    \"amount\": 2211,\n                    \"reportID\": \"R006AseGxMka\",\n                    \"tax\": {\n                        \"rateID\":\"id_TAX_OPTION_16\",\n                        \"amount\":600\n                    }\n                }\n            ]\n        }\n    }'","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations"},"status":"OK","code":200,"_postman_previewlanguage":"plain","header":[{"key":"Server","value":"nginx"},{"key":"Date","value":"Wed, 27 Mar 2024 07:49:47 GMT"},{"key":"Content-Type","value":"text/plain;charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  4.1.1  Java/Private Build/1.8)"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Allow-Methods","value":"OPTIONS, GET, POST"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"origin-when-cross-origin"},{"key":"Content-Security-Policy","value":"frame-ancestors https://www.expensify.com https://staging.expensify.com https://integrations.expensify.com"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\r\n    \"responseCode\" : 200,\r\n    \"transactionList\" : [\r\n        {\r\n            \"amount\" : 1234,\r\n            \"merchant\" : \"Name Of Merchant 1\",\r\n            \"created\" : \"2016-01-01\",\r\n            \"transactionID\" : \"6720309558248016\",\r\n            \"currency\" : \"USD\"\r\n        },\r\n        {\r\n            \"amount\" : 2211,\r\n            \"merchant\" : \"Name Of Merchant 2\",\r\n            \"created\" : \"2016-01-31\",\r\n            \"transactionID\" : \"6720309558248017\",\r\n            \"currency\" : \"CAD\"\r\n        }\r\n    ]\r\n}"}],"_postman_id":"726086c1-f4c2-4a6d-a884-6a2cacab9260"}],"id":"09749f4e-2b0c-4e40-b577-7f993ed133b1","description":"<p>This section details how to create expenses in a user's account through the Expensify API.</p>\n<p><strong>Request Format:</strong></p>\n<p>This follows the <code>requestJobDescription</code> format with specific input settings.</p>\n<p><strong>Input Settings:</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Name</th>\n<th>Format</th>\n<th>Valid Values</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>type</td>\n<td>String</td>\n<td>\"expenses\"</td>\n<td>Specifies to create expenses.</td>\n</tr>\n<tr>\n<td>employeeEmail</td>\n<td>String</td>\n<td>A valid email address</td>\n<td>The expenses will be created in this account.</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Note:</strong> Using <code>employeeEmail</code> requires advanced permissions. Contact <a href=\"https://community.expensify.com/discussion/5280/how-to-find-resources-for-using-expensify\">Expensify's Customer Community</a> for more information.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Name</th>\n<th>Format</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>transactionList</td>\n<td>JSON array</td>\n<td>List of expense objects. (See below for details)</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Expense Object Details:</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Name</th>\n<th>Format</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>merchant</td>\n<td>String</td>\n<td>The name of the expense's merchant.</td>\n</tr>\n<tr>\n<td>created</td>\n<td>String</td>\n<td>The date of the expense (format yyyy-mm-dd).</td>\n</tr>\n<tr>\n<td>amount</td>\n<td>Integer</td>\n<td>The amount of the expense, in cents.</td>\n</tr>\n<tr>\n<td>currency</td>\n<td>String</td>\n<td>The three-letter currency code of the expense.</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Optional Expense Elements:</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Name</th>\n<th>Format</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>externalID</td>\n<td>String</td>\n<td>A unique, custom string to identify the expense after export.</td>\n</tr>\n<tr>\n<td>category</td>\n<td>String</td>\n<td>The name of the category to assign to the expense</td>\n</tr>\n<tr>\n<td>tag</td>\n<td>String</td>\n<td>The name of the tag to assign to the expense</td>\n</tr>\n<tr>\n<td>billable</td>\n<td>boolean</td>\n<td>Whether to mark the expense as billable or not</td>\n</tr>\n<tr>\n<td>reimbursable</td>\n<td>Boolean</td>\n<td>Whether to mark the expense as reimbursable or not</td>\n</tr>\n<tr>\n<td>comment</td>\n<td>String</td>\n<td>An expense comment.</td>\n</tr>\n<tr>\n<td>reportID</td>\n<td>String</td>\n<td>The ID of the report you want to attach the expense to.</td>\n</tr>\n<tr>\n<td>policyID</td>\n<td>String</td>\n<td>The ID of the policy the tax belongs to.</td>\n</tr>\n<tr>\n<td>tax</td>\n<td>JSONObject</td>\n<td>A tax object (See below for details)</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Tax Object Details:</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Name</th>\n<th>Format</th>\n<th>Valid Values</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>rateID</td>\n<td>String</td>\n<td>The tax rateID from the policy (use Policy Getter job to retrieve).</td>\n<td>The tax rateID</td>\n</tr>\n<tr>\n<td>amount</td>\n<td>Integer (Optional)</td>\n<td>The tax amount paid on the expense (specify for partial tax).</td>\n<td>The tax amount paid on the expense</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"09749f4e-2b0c-4e40-b577-7f993ed133b1"}],"id":"821e36d3-ff61-4170-9b16-aac7c7271989","_postman_id":"821e36d3-ff61-4170-9b16-aac7c7271989","description":""},{"name":"READ/GET","item":[{"name":"Policy Getter","item":[{"name":"Retrieve Policy","id":"5de64d8a-6594-4a4b-91cd-c999e48b4163","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"basic","basic":{"basicConfig":[{"key":"username","value":"{{partnerUserID}}"},{"key":"password","value":"{{partnerUserSecret}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n        \"type\":\"get\",\n        \"credentials\":{\n            \"partnerUserID\": {{partnerUserID}},\n            \"partnerUserSecret\": {{partnerUserSecret}}\n        },\n        \"inputSettings\":{\n            \"type\":\"policy\",\n            \"fields\": [\"tax\"],\n            \"policyIDList\": [\"952DB91B963583C7\"],\n            \"userEmail\":\"ifedolapo387@gmail.com\"\n        }\n    }'","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations","urlObject":{"protocol":"https","path":["Integration-Server","ExpensifyIntegrations"],"host":["integrations","expensify","com"],"query":[],"variable":[]}},"response":[{"id":"bf5a9ee0-c167-411e-84f9-b3c65c4a3f23","name":"Retrieve Policy","originalRequest":{"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n        \"type\":\"get\",\n        \"credentials\":{\n            \"partnerUserID\": {{partnerUserID}},\n            \"partnerUserSecret\": {{partnerUserSecret}}\n        },\n        \"inputSettings\":{\n            \"type\":\"policy\",\n            \"fields\": [\"tax\"],\n            \"policyIDList\": [\"952DB91B963583C7\"],\n            \"userEmail\":\"ifedolapo387@gmail.com\"\n        }\n    }'","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx"},{"key":"Date","value":"Wed, 27 Mar 2024 08:04:03 GMT"},{"key":"Content-Type","value":"application/json;charset=utf-8"},{"key":"Content-Length","value":"61"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  4.1.1  Java/Private Build/1.8)"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Allow-Methods","value":"OPTIONS, GET, POST"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"origin-when-cross-origin"},{"key":"Content-Security-Policy","value":"frame-ancestors https://www.expensify.com https://staging.expensify.com https://integrations.expensify.com"}],"cookie":[],"responseTime":null,"body":"{\n    \"responseCode\": 200,\n    \"policyInfo\": {\n        \"4C6722D4BD2BD941\": {\n            \"reportFields\": [{\n                \"values\": [],\n                \"name\": \"title\",\n                \"type\": \"formula\"\n            }, {\n                \"values\": [\"Class 1\", \"Class 2\", \"Class 2:Sub class 2\"],\n                \"name\": \"Classes\",\n                \"type\": \"dropdown\"\n            }, {\n                \"values\": [\"Donatello\", \"Leonardo\", \"Michelangelo\", \"Rafael\"],\n                \"name\": \"Customers/Jobs\",\n                \"type\": \"dropdown\"\n            }],\n            \"categories\": [{\n                \"name\": \"Entertainment\",\n                \"enabled\": true\n            }, {\n                \"name\": \"Transportation\",\n                \"enabled\": true\n            }, {\n                \"name\": \"Phone\",\n                \"enabled\": true\n            }, {\n                \"name\": \"Fuel/Mileage\",\n                \"enabled\": true\n            }, {\n                \"name\": \"Lodging\",\n                \"enabled\": true\n            }, {\n                \"name\": \"Meals\",\n                \"enabled\": true\n            }, {\n                \"name\": \"Other\",\n                \"enabled\": false\n            }],\n            \"tags\": [{\n                \"glCode\": \"\",\n                \"name\": \"Enterprise\",\n                \"enabled\": true\n            }, {\n                \"glCode\": \"\",\n                \"name\": \"Enterprise:Jean-Luc Picard\",\n                \"enabled\": true\n            }, {\n                \"glCode\": \"\",\n                \"name\": \"Enterprise:Lt. Commander Data\",\n                \"enabled\": true\n            }, {\n                \"glCode\": \"\",\n                \"name\": \"Enterprise:William Riker\",\n                \"enabled\": true\n            }],\n            \"tax\": {\n                \"default\": \"4\",\n                \"rates\": [{\n                    \"rate\": 0,\n                    \"name\": \"EC Goods Zero-rated\",\n                    \"rateID\": \"5\"\n                }, {\n                    \"rate\": 0,\n                    \"name\": \"EC Services Standard\",\n                    \"rateID\": \"4\"\n                }, {\n                    \"rate\": 20,\n                    \"name\": \"Standard\",\n                    \"rateID\": \"2\"\n                }, {\n                    \"rate\": 5,\n                    \"name\": \"Reduced\",\n                    \"rateID\": \"9\"\n                }],\n                \"name\": \"Tax\"\n            }\n        },\n        \"3F329EA1C3809E6C\": {\n            \"categories\": [{\n                \"name\": \"Phone Costs\",\n                \"areCommentsRequired\": false,\n                \"enabled\": false\n            }, {\n                \"name\": \"Legal\",\n                \"areCommentsRequired\": false,\n                \"enabled\": false\n            }, {\n                \"name\": \"Agency Expense\",\n                \"areCommentsRequired\": false,\n                \"enabled\": false\n            }],\n            \"reportFields\": [{\n                \"values\": [],\n                \"name\": \"title\",\n                \"type\": \"formula\"\n            }],\n            \"tags\": [{\n                \"name\": \"Tags\",\n                \"tags\": []\n            }],\n            \"tax\": {},\n            \"employees\": [{\n                \"email\": \"admin@domain.com\",\n                \"role\": \"admin\",\n                \"submitsTo\": \"user@domain.com\"\n            }, {\n                \"email\": \"user@domain.com\",\n                \"role\": \"user\",\n                \"submitsTo\": \"admin@domain.com\",\n                \"employeeID\": \"Emp1\",\n                \"customField2\": \"custom information\",\n            }]\n        }\n    }\n}"}],"_postman_id":"5de64d8a-6594-4a4b-91cd-c999e48b4163"}],"id":"5c30bf38-103b-4bbc-91f4-346372997ca6","description":"<p>This section describes the input parameters for retrieving specific information about listed policies.</p>\n<p>Here's a breakdown of the parameters needed:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter Name</th>\n<th>Format</th>\n<th>Valid Values</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>type</td>\n<td>String</td>\n<td>\"policy\"</td>\n<td>Specifies to the job that it has to get information specific to policies.</td>\n</tr>\n<tr>\n<td>policyIDList</td>\n<td>JSON Array</td>\n<td></td>\n<td>The IDs of the policies to get information for.</td>\n</tr>\n<tr>\n<td>fields</td>\n<td>JSON Array</td>\n<td>\"categories\", \"reportFields\", \"tags\", \"tax\", \"employees\"</td>\n<td>Specifies the fields of the policy to gather information for.</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Optional Elements:</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter Name</th>\n<th>Format</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>userEmail</td>\n<td>String</td>\n<td>Specifies the user to gather the policy data for. You must have been granted third-party access by that user/company domain beforehand.</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"5c30bf38-103b-4bbc-91f4-346372997ca6"}],"id":"df7f26be-5607-455b-9a99-64ddf9e37d80","_postman_id":"df7f26be-5607-455b-9a99-64ddf9e37d80","description":""},{"name":"UPDATE","item":[{"name":"Policy Updater","item":[{"name":"Update Policy","id":"b192fed3-4651-4499-bd78-9643fb0d0237","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"basic","basic":{"basicConfig":[{"key":"username","value":"{{partnerUserID}}"},{"key":"password","value":"{{partnerUserSecret}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n        \"type\": \"update\",\n        \"credentials\": {\n            \"partnerUserID\": {{partnerUserID}},\n            \"partnerUserSecret\": {{partnerUserSecret}}\n        },\n        \"inputSettings\": {\n            \"type\": \"policy\",\n            \"policyID\": \"0123456789ABCDEF\"\n        },\n        \"categories\": {\n            \"action\": \"merge\",\n            \"data\": [\n                {\n                    \"name\": \"Category 1\",\n                    \"enabled\": true,\n                    \"payrollCode\": \"Payroll Code 1\",\n                    \"glCode\": \"GL Code 1\",\n                    \"commentHint\": \"Comment hint 1\",\n                    \"areCommentsRequired\": true,\n                    \"maxExpenseAmount\": 2500\n                },\n                {\n                    \"name\": \"Category 2\",\n                    \"enabled\": false\n                }\n            ]\n        },\n        \"tags\": {\n            \"data\": [\n                {\n                    \"name\": \"Tag\",\n                    \"tags\": [\n                        {\n                            \"name\": \"Tag 1\",\n                            \"glCode\": \"Tag 1 GL Code\"\n                        },\n                        {\n                            \"name\": \"Tag 2\",\n                            \"enabled\": false\n                        }\n                    ]\n                }\n            ]\n        },\n        \"reportFields\": {\n            \"action\": \"merge\",\n            \"data\": [\n                {\n                    \"name\": \"Report field 1\",\n                    \"type\": \"dropdown\",\n                    \"values\": [\n                        \"value 1\",\n                        \"value 2\",\n                        \"value 3\"\n                    ]\n                }\n            ]\n        }\n    }'","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations","urlObject":{"protocol":"https","path":["Integration-Server","ExpensifyIntegrations"],"host":["integrations","expensify","com"],"query":[],"variable":[]}},"response":[{"id":"03268392-83be-4486-8f5c-e25edd38c9f9","name":"Update Categories, Tags, and Report Fields","originalRequest":{"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n        \"type\": \"update\",\n        \"credentials\": {\n            \"partnerUserID\": {{partnerUserID}},\n            \"partnerUserSecret\": {{partnerUserSecret}}\n        },\n        \"inputSettings\": {\n            \"type\": \"policy\",\n            \"policyID\": \"0123456789ABCDEF\"\n        },\n        \"categories\": {\n            \"action\": \"merge\",\n            \"data\": [\n                {\n                    \"name\": \"Category 1\",\n                    \"enabled\": true,\n                    \"payrollCode\": \"Payroll Code 1\",\n                    \"glCode\": \"GL Code 1\",\n                    \"commentHint\": \"Comment hint 1\",\n                    \"areCommentsRequired\": true,\n                    \"maxExpenseAmount\": 2500\n                },\n                {\n                    \"name\": \"Category 2\",\n                    \"enabled\": false\n                }\n            ]\n        },\n        \"tags\": {\n            \"data\": [\n                {\n                    \"name\": \"Tag\",\n                    \"tags\": [\n                        {\n                            \"name\": \"Tag 1\",\n                            \"glCode\": \"Tag 1 GL Code\"\n                        },\n                        {\n                            \"name\": \"Tag 2\",\n                            \"enabled\": false\n                        }\n                    ]\n                }\n            ]\n        },\n        \"reportFields\": {\n            \"action\": \"merge\",\n            \"data\": [\n                {\n                    \"name\": \"Report field 1\",\n                    \"type\": \"dropdown\",\n                    \"values\": [\n                        \"value 1\",\n                        \"value 2\",\n                        \"value 3\"\n                    ]\n                }\n            ]\n        }\n    }'","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations"},"status":"OK","code":200,"_postman_previewlanguage":"plain","header":[{"key":"Server","value":"nginx"},{"key":"Date","value":"Wed, 27 Mar 2024 08:10:44 GMT"},{"key":"Content-Type","value":"text/plain;charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  4.1.1  Java/Private Build/1.8)"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Allow-Methods","value":"OPTIONS, GET, POST"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"origin-when-cross-origin"},{"key":"Content-Security-Policy","value":"frame-ancestors https://www.expensify.com https://staging.expensify.com https://integrations.expensify.com"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\r\n    \"responseCode\": 200\r\n}\r\n"},{"id":"1addeeac-fcd8-4fd0-a8b3-f1b1b355c623","name":"Update Independent Multi-level Tags in JSON","originalRequest":{"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n        \"type\": \"update\",\n        \"credentials\": {\n            \"partnerUserID\": {{partnerUserID}},\n            \"partnerUserSecret\":{{partnerUserSecret}}\n        },\n        \"inputSettings\": {\n            \"type\": \"policy\",\n            \"policyID\": \"952DB91B963583C7\"\n        },\n        \"tags\": {\n            \"data\": [\n                {\n                    \"name\": \"Tag Level 1\",\n                    \"setRequired\": true,\n                    \"tags\": [\n                        {\n                            \"name\": \"Tag 1\",\n                            \"glCode\": \"Tag 1 GL Code\"\n                        },\n                        {\n                            \"name\": \"Tag 2\",\n                            \"glCode\": \"Tag 2 GL Code\"\n                        }\n                    ]\n                },\n                {\n                    \"name\": \"Tag Level 2\",\n                    \"setRequired\": false,\n                    \"tags\": [\n                        {\n                            \"name\": \"Tag 3\",\n                            \"glCode\": \"Tag 3 GL Code\"\n                        },\n                        {\n                            \"name\": \"Tag 4\",\n                            \"glCode\": \"Tag 4 GL Code\"\n                        }\n                    ]\n                }\n            ]\n        }\n    }'","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations"},"status":"OK","code":200,"_postman_previewlanguage":"plain","header":[{"key":"Server","value":"nginx"},{"key":"Date","value":"Wed, 27 Mar 2024 08:13:38 GMT"},{"key":"Content-Type","value":"text/plain;charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  4.1.1  Java/Private Build/1.8)"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Allow-Methods","value":"OPTIONS, GET, POST"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"origin-when-cross-origin"},{"key":"Content-Security-Policy","value":"frame-ancestors https://www.expensify.com https://staging.expensify.com https://integrations.expensify.com"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\r\n    \"responseCode\": 200\r\n}\r\n\r\nNote: Dependent multi-level tags, with GL Codes and tag level names. These must be passed via CSV.\r\nTag file - In this example, we have the following data in a file called tags.csv.\r\n\r\nState,State GL,Region,Region GL,City,City GL\r\nCalifornia,100,North,20,San Francisco,1\r\nCalifornia,100,North,20,Oakland,2\r\nCalifornia,100,South,30,Los Angeles,3\r\nCalifornia,100,South,30,San Diego,4\r\nTexas,200,East,40,Dallas,5\r\nTexas,200,East,40,Houston,6\r\nTexas,200,South,50,San Antonio,7\r\n"},{"id":"0b166b38-2d0c-4c40-a0f0-5bbe5889b1fd","name":"Report Fields with the Values as Objects Rather than strings","originalRequest":{"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n        \"type\": \"update\",\n        \"credentials\": {\n            \"partnerUserID\":{{partnerUserID}},\n            \"partnerUserSecret\":{{partnerUserSecret}}\n        },\n        \"inputSettings\": {\n            \"type\": \"policy\",\n            \"policyID\": \"0123456789ABCDEF\"\n        },\n        \"tags\": {\n            \"action\": \"replace\",\n            \"source\":\"file\",\n            \"config\": {\n                    \"dependency\":true,\n                    \"glCodes\":true,\n                    \"header\":true,\n                    \"setRequired\":true,\n                    \"fileType\":\"csv\"\n            }\n        }\n    }' \\\n    --data-urlencode 'file@tags.csv'","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations"},"status":"OK","code":200,"_postman_previewlanguage":"plain","header":[{"key":"Server","value":"nginx"},{"key":"Date","value":"Wed, 27 Mar 2024 08:16:36 GMT"},{"key":"Content-Type","value":"text/plain;charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  4.1.1  Java/Private Build/1.8)"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Allow-Methods","value":"OPTIONS, GET, POST"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"origin-when-cross-origin"},{"key":"Content-Security-Policy","value":"frame-ancestors https://www.expensify.com https://staging.expensify.com https://integrations.expensify.com"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\r\n    \"responseCode\": 200\r\n}\r\n"}],"_postman_id":"b192fed3-4651-4499-bd78-9643fb0d0237"}],"id":"f1435b1e-fcf2-4f57-986f-503c7820ea93","description":"<p>Lets you independently manage categories, tags and report fields on a policy.</p>\n<ul>\n<li><code>requestJobDescription</code></li>\n</ul>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>VALID VALUES</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Optional elements</strong></td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>categories</td>\n<td>JSON object</td>\n<td>See <code>categories</code> below</td>\n<td>Replace or update the existing categories of the policy with the ones provided.</td>\n</tr>\n<tr>\n<td>tags</td>\n<td>JSON object</td>\n<td>See the dedicated <a href=\"https://integrations.expensify.com/Integration-Server/doc/#update-tags\">Update tags</a> section below</td>\n<td>Replace the existing tags of the policy with the ones provided.</td>\n</tr>\n<tr>\n<td>reportFields</td>\n<td>JSON object</td>\n<td>See <code>reportFields</code> below</td>\n<td>Replace or update the existing report fields of the policy with the ones provided.</td>\n</tr>\n</tbody>\n</table>\n</div><ul>\n<li><code>inputSettings</code></li>\n</ul>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>VALID VALUES</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>type</td>\n<td>String</td>\n<td>\"policy\"</td>\n<td>Specifies to the job that it has to update a policy.</td>\n</tr>\n<tr>\n<td>policyID</td>\n<td>String</td>\n<td>Any valid Expensify policy ID, owned or shared with the user with admin permissions.</td>\n<td>The ID of the policy to update.</td>\n</tr>\n<tr>\n<td><strong>Optional elements</strong></td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>policyIDList</td>\n<td>JSON Array</td>\n<td>Instead of providing a <code>policyID</code>, you can provide an array of policyIDs to update all polices at once with the same information.</td>\n<td></td>\n</tr>\n</tbody>\n</table>\n</div><ul>\n<li><code>categories</code></li>\n</ul>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>VALID VALUES</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>action</td>\n<td>String</td>\n<td>\"merge\", \"replace\"</td>\n<td>Specifies how the categories will be updated.  <br />- \"replace\" removes all existing categories and replaces them with the specified list  <br />- \"merge\" keeps existing categories and updates/adds the ones specified.</td>\n</tr>\n<tr>\n<td>data</td>\n<td>JSON array</td>\n<td>See below</td>\n<td></td>\n</tr>\n</tbody>\n</table>\n</div><ul>\n<li><code>categories.data</code> objects</li>\n</ul>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>name</td>\n<td>String</td>\n<td>The name of the category.</td>\n</tr>\n<tr>\n<td>enabled</td>\n<td>Boolean</td>\n<td>Whether the category is enabled on Expensify.</td>\n</tr>\n<tr>\n<td><strong>Optional elements</strong></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>glCode</td>\n<td>String</td>\n<td>The GL Code associated to the category.</td>\n</tr>\n<tr>\n<td>payrollCode</td>\n<td>String</td>\n<td>The Payroll Code associated to the category.</td>\n</tr>\n<tr>\n<td>areCommentsRequired</td>\n<td>Boolean</td>\n<td>Whether comments are required for expenses under that category.</td>\n</tr>\n<tr>\n<td>commentHint</td>\n<td>String</td>\n<td>The hint value for the comment for expenses under that category.</td>\n</tr>\n<tr>\n<td>maxExpenseAmount</td>\n<td>Integer</td>\n<td>The maximum amount (in cents) for expenses under that category.</td>\n</tr>\n</tbody>\n</table>\n</div><ul>\n<li><code>reportFields</code></li>\n</ul>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>VALID VALUES</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>action</td>\n<td>String</td>\n<td>\"merge\", \"replace\"</td>\n<td>Specifies how the report fields will be updated.  <br />- \"replace\" removes all existing report fields and replaces them with the specified list  <br />- \"merge\" keeps existing report fields and updates/adds the ones specified.</td>\n</tr>\n<tr>\n<td>data</td>\n<td>JSON array</td>\n<td>See below</td>\n<td></td>\n</tr>\n</tbody>\n</table>\n</div><ul>\n<li><code>reportFields.data</code> objects</li>\n</ul>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>VALID VALUES</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>name</td>\n<td>String</td>\n<td></td>\n<td>The name of the report field.</td>\n</tr>\n<tr>\n<td>type</td>\n<td>String</td>\n<td>\"text\", \"dropdown\", \"date\"</td>\n<td>The type of the report field.</td>\n</tr>\n<tr>\n<td>values</td>\n<td>JSON array</td>\n<td>Strings, JSONObjects - See below</td>\n<td><em>Only if type is \"dropdown\"</em>  <br />The values of the dropdown. Type must be uniform across the entire array. For more information on supplying JSONObjects see <code>reportFields.data.values</code> objects section below.</td>\n</tr>\n<tr>\n<td><strong>Optional elements</strong></td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>defaultValue</td>\n<td>String</td>\n<td></td>\n<td>The default value of the report field.  <br /><em>Only used for types \"text\" and \"dropdown\"</em></td>\n</tr>\n</tbody>\n</table>\n</div><ul>\n<li><code>reportFields.data.values</code> objects</li>\n</ul>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>VALID VALUES</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>value</td>\n<td>String</td>\n<td></td>\n<td>The name of the report field value.</td>\n</tr>\n<tr>\n<td><strong>Optional elements</strong></td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>enabled</td>\n<td>Boolean</td>\n<td><code>true</code>, <code>false</code></td>\n<td>Whether the report field value is enabled or not. Default value is <code>true</code>.</td>\n</tr>\n<tr>\n<td>externalID</td>\n<td>String</td>\n<td></td>\n<td>The externalID associated with the report field value.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"update-tags\">Update tags  <a href=\"https://null\"> </a></h3>\n<p>Tags can be specified in two ways:</p>\n<ul>\n<li>Directly in the JSON job description</li>\n<li>As extra parameters of the request (via a <code>csv</code> file)</li>\n</ul>\n<h4 id=\"tag-levels-dependency\">Tag levels dependency</h4>\n<p>For multi-level tagging, Expensify has the notion of tag level dependency. This means each tag level is dependent on the parent tag level above it. For more information and examples about multi-tagging, please refer to our <a href=\"https://docs.expensify.com/setup-for-admins-and-accountants/advanced-configuration-for-managers-and-accountants/tags\">help site</a>.</p>\n<h4 id=\"passing-tag-data-in-json-independent-levels-only\">Passing tag data in JSON (independent levels only)</h4>\n<ul>\n<li><code>tags</code></li>\n</ul>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>VALID VALUES</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>data</td>\n<td>JSON array</td>\n<td>See below</td>\n<td></td>\n</tr>\n<tr>\n<td>source</td>\n<td>String</td>\n<td>\"inline\"</td>\n<td>Specifies that the tags are directly passed in the JSON payload.</td>\n</tr>\n</tbody>\n</table>\n</div><ul>\n<li><code>tags.data</code> objects</li>\n</ul>\n<p>Multiple objects can be specified. Each one corresponds to a level in multi-level tagging.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>VALID VALUES</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>name</td>\n<td>String</td>\n<td></td>\n<td>The name of the tag level. Only use with multi-level tagging.</td>\n</tr>\n<tr>\n<td>setRequired</td>\n<td>Boolean</td>\n<td><code>true</code>, <code>false</code></td>\n<td>Whether users must specify a tag for that level, when coding expenses. This is set to <code>false</code> by default.</td>\n</tr>\n<tr>\n<td>tags</td>\n<td>JSON array</td>\n<td>See below</td>\n<td>The tags for that level.</td>\n</tr>\n</tbody>\n</table>\n</div><ul>\n<li><code>tags.data.tags</code> objects</li>\n</ul>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>name</td>\n<td>String</td>\n<td>The name of the tag.</td>\n</tr>\n<tr>\n<td><strong>Optional elements</strong></td>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td>enabled</td>\n<td>Boolean</td>\n<td>Whether the tag is enabled or not. Default value is <code>true</code>.</td>\n</tr>\n<tr>\n<td>glCode</td>\n<td>String</td>\n<td>The GL Code associated to the tag.</td>\n</tr>\n</tbody>\n</table>\n</div><h4 id=\"passing-tag-data-from-plain-text-as-additional-request-parameters-dependent-or-independent-tag-levels\">Passing tag data from plain text as additional request parameters (dependent or independent tag levels)</h4>\n<p>The tag data must be passed in a parameter called <code>file</code> in the request.</p>\n<p>The <code>tags</code> object must contain the following information:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>VALID VALUES</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>source</td>\n<td>String</td>\n<td>\"file\"</td>\n</tr>\n<tr>\n<td>config</td>\n<td>JSON Object</td>\n<td>See below</td>\n</tr>\n</tbody>\n</table>\n</div><ul>\n<li><code>tags.config</code></li>\n</ul>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>NAME</th>\n<th>FORMAT</th>\n<th>VALID VALUES</th>\n<th>DESCRIPTION</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>dependency</td>\n<td>Boolean</td>\n<td>true, false</td>\n<td>Whether the tag levels are dependent.</td>\n</tr>\n<tr>\n<td>setRequired</td>\n<td>Boolean or JSON Array</td>\n<td><em>e.g.</em> <code>true</code> or <code>[true, false]</code></td>\n<td>If <code>dependency</code> is <code>true</code>, then a single boolean is expected, as dependent tag lists cannot be marked as required individually. If <code>dependency</code> is <code>false</code>, an array of booleans should be used.</td>\n</tr>\n<tr>\n<td>glCodes</td>\n<td>Boolean</td>\n<td>true, false</td>\n<td>Whether adjacent columns in the tag file(s) contain GL Codes.</td>\n</tr>\n<tr>\n<td>header</td>\n<td>Boolean</td>\n<td>true, false</td>\n<td>Whether the first line of the file contains the names of the tag levels.</td>\n</tr>\n<tr>\n<td>setRequired</td>\n<td>Boolean</td>\n<td>true, false</td>\n<td>If set to <code>true</code>, users will be required to tag each expense under that category.</td>\n</tr>\n<tr>\n<td>fileType</td>\n<td>String</td>\n<td>\"cvs\" or \"tsv\"</td>\n<td>Format of the tag data.</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"f1435b1e-fcf2-4f57-986f-503c7820ea93"},{"name":"Report Status Updater","item":[{"name":"Update Report Status","id":"73056064-a1ff-42c2-88db-f884fd9fd76f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"basic","basic":{"basicConfig":[{"key":"username","value":"{{partnerUserID}}"},{"key":"password","value":"{{partnerUserSecret}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n\"type\":\"update\",\n        \"credentials\":{\n            \"partnerUserID\":{{partnerUserID}},\n            \"partnerUserSecret\":{{partnerUserSecret}},\n        },\n        \"inputSettings\":{\n            \"type\":\"reportStatus\",\n            \"status\" : \"REIMBURSED\",\n            \"filters\":{\n                \"reportIDList\": \"R006AseGxMka,R00bCluvcO4T\"\n            }\n        }\n    }'\n","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations","urlObject":{"protocol":"https","path":["Integration-Server","ExpensifyIntegrations"],"host":["integrations","expensify","com"],"query":[],"variable":[]}},"response":[{"id":"6e6204bc-16ed-4f69-9cc6-0c747b07f7c1","name":"Update Report Status","originalRequest":{"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"requestJobDescription","value":"{\n\"type\":\"update\",\n        \"credentials\":{\n            \"partnerUserID\":{{partnerUserID}},\n            \"partnerUserSecret\":{{partnerUserSecret}},\n        },\n        \"inputSettings\":{\n            \"type\":\"reportStatus\",\n            \"status\" : \"REIMBURSED\",\n            \"filters\":{\n                \"reportIDList\": \"R006AseGxMka,R00bCluvcO4T\"\n            }\n        }\n    }'\n","type":"text"}]},"url":"https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations"},"status":"OK","code":200,"_postman_previewlanguage":"plain","header":[{"key":"Server","value":"nginx"},{"key":"Date","value":"Thu, 28 Mar 2024 12:08:27 GMT"},{"key":"Content-Type","value":"text/plain;charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  4.1.1  Java/Private Build/1.8)"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Allow-Methods","value":"OPTIONS, GET, POST"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"origin-when-cross-origin"},{"key":"Content-Security-Policy","value":"frame-ancestors https://www.expensify.com https://staging.expensify.com https://integrations.expensify.com"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\r\n    \"responseCode\" : 200,\r\n    \"reportIDs\" : [\r\n        \"R006AseGxMka\",\r\n        \"R00bCluvcO4T\"\r\n    ]\r\n}\r\n\r\nPartial success\r\nskippedReports corresponds to a list of reports that could not be updated because they are in an invalid status.\r\nfailedReports corresponds to a list of reports that failed to be updated for another reason.\r\n{\r\n    \"responseCode\" : 207,\r\n    \"reportIDs\" : [\r\n        \"R00bCluvcO4T\"\r\n    ],\r\n    \"skippedReports\" : [\r\n        {\r\n            \"reason\" : \"Report is in status 'Open'\",\r\n            \"reportID\" : \"R006AseGxMka\"\r\n        }\r\n    ],\r\n    \"failedReports\": [\r\n        {\r\n            \"reason\" : \"Internal error\",\r\n            \"reportID\" : \"R002bGmt16ac\"\r\n        }\r\n    ]\r\n}\r\nValidation error\r\n{\r\n    \"responseMessage\" : \"Status 'APPROVED' is not supported\",\r\n    \"responseCode\" : 410\r\n}\r\n"}],"_postman_id":"73056064-a1ff-42c2-88db-f884fd9fd76f"}],"id":"c23066ec-d776-434a-acb5-af53a40189ec","description":"<p>This section describes how to update the status of a report using the Expensify API. <strong>Note:</strong> Currently, the only supported action is marking reports from \"Approved\" to \"Reimbursed\".</p>\n<p><strong>Input Settings</strong></p>\n<p>The following table details the required and optional input settings for updating report status:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Name</th>\n<th>Format</th>\n<th>Valid Values</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>type</td>\n<td>String</td>\n<td>\"reportStatus\"</td>\n<td>Specifies the job type as updating report status.</td>\n</tr>\n<tr>\n<td>status</td>\n<td>String</td>\n<td>\"REIMBURSED\"</td>\n<td>The new status for the reports. Currently, only \"REIMBURSED\" is supported.</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Note:</strong></p>\n<ul>\n<li>Only reports in the \"Approved\" status can be updated to \"Reimbursed\". Other statuses will be ignored.</li>\n<li>You can use filters to target specific reports for the update. Details on filters are provided in the next section.</li>\n</ul>\n<p><strong>inputSettings.filters</strong></p>\n<p>This section details the available filters within the <code>filters</code> JSON object:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Name</th>\n<th>Format</th>\n<th>Valid Values</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>reportIDList</td>\n<td>String, Optional</td>\n<td>Comma-separated list of report IDs to update.</td>\n<td></td>\n</tr>\n<tr>\n<td>startDate</td>\n<td>Date, Required if reportIDList is not specified</td>\n<td>yyyy-mm-dd formatted date</td>\n<td>Filters reports submitted or created before this date (inclusive).</td>\n</tr>\n<tr>\n<td>endDate</td>\n<td>Date, Optional</td>\n<td>yyyy-mm-dd formatted date</td>\n<td>Filters reports submitted or created after this date (inclusive).</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"c23066ec-d776-434a-acb5-af53a40189ec"}],"id":"740bb08a-174e-4f4b-bd20-d5fe2dfeda11","_postman_id":"740bb08a-174e-4f4b-bd20-d5fe2dfeda11","description":""}],"id":"04b3dadf-d3e7-4bae-b599-6852c41c177b","_postman_id":"04b3dadf-d3e7-4bae-b599-6852c41c177b","description":""},{"name":"ERROR CODES","item":[],"id":"06212c8f-fc3c-48f6-80c1-566589dbb135","description":"<p><strong>Expensify API Error Codes</strong></p>\n<p>This table lists potential error codes encountered when using the Expensify API and their possible reasons.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Error Code</th>\n<th>Possible Reason</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>207 (Partial Success)</td>\n<td>Some of the reports failed to update. Their IDs are contained in the list <code>failedReports</code> within the response.</td>\n</tr>\n<tr>\n<td>400 (Bad Request)</td>\n<td>Missing required parameter</td>\n</tr>\n<tr>\n<td></td>\n<td>Invalid parameter value format</td>\n</tr>\n<tr>\n<td></td>\n<td>Malformed JSON body</td>\n</tr>\n<tr>\n<td>401 (Unauthorized)</td>\n<td>Invalid or missing API credentials</td>\n</tr>\n<tr>\n<td></td>\n<td>Insufficient permissions for the requested action</td>\n</tr>\n<tr>\n<td>403 (Forbidden)</td>\n<td>The requested action is not allowed for your account</td>\n</tr>\n<tr>\n<td></td>\n<td>Resource access restrictions in place</td>\n</tr>\n<tr>\n<td>404 (Not Found)</td>\n<td>Requested endpoint does not exist</td>\n</tr>\n<tr>\n<td></td>\n<td>Resource not found (e.g., report with a specific ID)</td>\n</tr>\n<tr>\n<td>409 (Conflict)</td>\n<td>Attempting to create a duplicate resource (e.g., creating a report with an existing ID)</td>\n</tr>\n<tr>\n<td></td>\n<td>Conflicting data in the request</td>\n</tr>\n<tr>\n<td>410 (Validation Error)</td>\n<td>The request contains invalid data that fails validation checks on the Expensify API side.</td>\n</tr>\n<tr>\n<td></td>\n<td>Examples: Malformed date format, invalid enum value, etc.</td>\n</tr>\n<tr>\n<td>410 (Gone)</td>\n<td>Requested endpoint has been deprecated and is no longer available</td>\n</tr>\n<tr>\n<td></td>\n<td>Resource has been deleted</td>\n</tr>\n<tr>\n<td>422 (Unprocessable Entity)</td>\n<td>Validation errors in the request payload</td>\n</tr>\n<tr>\n<td></td>\n<td>Business logic violation (e.g., attempting to update a report with an invalid status)</td>\n</tr>\n<tr>\n<td>429 (Too Many Requests)</td>\n<td>Exceeding API rate limits</td>\n</tr>\n<tr>\n<td></td>\n<td>Throttling applied due to frequent requests</td>\n</tr>\n<tr>\n<td>500 (Generic Error)</td>\n<td>Unexpected error on the Expensify API server.</td>\n</tr>\n<tr>\n<td></td>\n<td>This is a generic error code for internal server issues. Consult Expensify support for further investigation in case of a 500 error.</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"06212c8f-fc3c-48f6-80c1-566589dbb135"},{"name":"GLOSSARY","item":[],"id":"8593d4fe-b3a6-489f-9774-d600e2b2bdef","description":"<p><strong>Expensify Postman Collection Glossary</strong></p>\n<p>This table defines key terms you will encounter throughout the Expensify API and this Postman collection.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Term</th>\n<th>Definition</th>\n<th>Usage in Expensify Collection</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>API (Application Programming Interface)</td>\n<td>A set of commands, functions, protocols, and objects that expose functionalities of an application or service to software developers.</td>\n<td>This collection uses the Expensify API to interact with data and functionalities.</td>\n</tr>\n<tr>\n<td>Authentication</td>\n<td>The process of verifying a user's identity to grant access to a system or resource.</td>\n<td>The collection uses API credentials (partnerUserID and partnerUserSecret) for authentication within your Postman requests.</td>\n</tr>\n<tr>\n<td>Authorization</td>\n<td>The process of determining what actions a user is allowed to perform after successful authentication.</td>\n<td>Expensify API controls access based on the permissions associated with your credentials.</td>\n</tr>\n<tr>\n<td>Collection (Postman)</td>\n<td>A group of related API requests organized together within Postman.</td>\n<td>This collection contains requests for various Expensify API functionalities (specific functionalities to be listed based on the collection's purpose).</td>\n</tr>\n<tr>\n<td>Endpoint</td>\n<td>A specific URL that represents a resource or functionality within the Expensify API.</td>\n<td>You'll use different endpoints for various actions like downloading reports (specific endpoints with brief descriptions can be listed).</td>\n</tr>\n<tr>\n<td>Environment (Postman)</td>\n<td>A set of key-value pairs that represent environment variables.</td>\n<td>You can use environments to store reusable values like API credentials or base URLs (specific use cases for environments within the collection can be mentioned).</td>\n</tr>\n<tr>\n<td>Error Code</td>\n<td>A numeric code included in the API response that indicates whether the request was successful (e.g., 200 OK) or encountered an error (e.g., 404 Not Found).</td>\n<td>This collection likely includes descriptions for common Expensify API error codes.</td>\n</tr>\n<tr>\n<td>FTL</td>\n<td>FreeMarker Template Language</td>\n<td>Expensify supports FTL for generating custom report outputs,</td>\n</tr>\n<tr>\n<td>POST (HTTP Method)</td>\n<td>An HTTP method used to send data to a server to create or update resources.</td>\n<td>The collection uses POST requests for actions that modify data, such as creating reports or updating their status.</td>\n</tr>\n<tr>\n<td>JSON (JavaScript Object Notation)</td>\n<td>A lightweight data interchange format commonly used to represent structured data in API requests and responses.</td>\n<td>Expensify uses JSON for data exchange in requests and responses.</td>\n</tr>\n<tr>\n<td>OAuth</td>\n<td>An authorization framework that allows users to grant third-party applications access to their accounts without sharing their credentials directly.</td>\n<td></td>\n</tr>\n<tr>\n<td>Partner User ID &amp; Partner User Secret</td>\n<td>The API credentials you generate from your Expensify account to access the Expensify API. These are required for authentication in your Postman requests.</td>\n<td></td>\n</tr>\n<tr>\n<td>Postman</td>\n<td>A popular application for building, testing, and managing API requests.</td>\n<td>This Expensify collection is designed to be used within Postman.</td>\n</tr>\n<tr>\n<td>Query Parameter</td>\n<td>Key-value pairs appended to the URL of an API request to filter or modify its behavior.</td>\n<td>Expensify might use query parameters for filtering reports based on dates or other criteria (specific examples can be listed).</td>\n</tr>\n<tr>\n<td>Request</td>\n<td>An HTTP message sent to a server to initiate communication and request a specific action or data.</td>\n<td>This collection consists of various POST requests tailored for interacting with the Expensify API.</td>\n</tr>\n<tr>\n<td>Response</td>\n<td>The HTTP message sent back by the server in response to a request. It contains data or a status code indicating the outcome of the request.</td>\n<td></td>\n</tr>\n<tr>\n<td>Resource</td>\n<td>An entity or piece of data managed by the Expensify API, such as reports, users, or expense categories.</td>\n<td>The collection interacts with various Expensify resources (specific resources the collection interacts with can be listed).</td>\n</tr>\n<tr>\n<td>REST (Representational State Transfer)</td>\n<td>An architectural style for designing APIs that emphasizes using a standardized set of HTTP methods (GET, POST, PUT, DELETE) to interact with resources.</td>\n<td>Expensify utilizes a RESTful API.</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"8593d4fe-b3a6-489f-9774-d600e2b2bdef"}]}