{"ScriptPreparationCode":"state = {\r\n \u0022prefix\u0022: \u0022posts\u0022,\r\n \u0022resources\u0022: [\r\n {\r\n \u0022name\u0022: \u0022posts/:id/attachments\u0022,\r\n \u0022description\u0022: \u0022Download, add, edit and delete attachments.\u0022,\r\n \u0022endpoints\u0022: [\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/attachments\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022, \u0022Trusted\u0022],\r\n \u0022description\u0022: \u0022Add the given attachment to the given post\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts_attachments\u0022,\r\n \u0022action\u0022: \u0022add\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022name\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The name of the attachment.\u0022,\r\n \u0022example\u0022: \u0022ACME Proposal.pptx\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022attachment_id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The id of an existing attachment if applicable. Required if \u0060data\u0060 is not given.\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022data\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The url to the attachment. Must be a public url or a data uri. Required if \u0060attachment_id\u0060 is not given.\u0022,\r\n \u0022example\u0022: \u0022http://example.com/files/ACME_Proposal.pptx\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022size\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The size in bytes of the file (optional).\u0022,\r\n \u0022example\u0022: 123456\r\n },\r\n {\r\n \u0022name\u0022: \u0022created_at\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022When the attachment was created (optional).\u0022,\r\n \u0022example\u0022: \u00222014-04-25T23:09:58\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022sha256\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The sha256 checksum of this file, expressed as a 64-character hexadecimal string (optional). If given, information about duplicates will be returned in the response.\u0022,\r\n \u0022example\u0022: \u00228ec8552d962a572a853de9a8203404fec51981919f9cbeb9017fe0f3740f2b9a\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222017.07\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022DELETE\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/attachments/:attachmentId\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022],\r\n \u0022description\u0022: \u0022Remove the given attachment from the given post\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts_attachments\u0022,\r\n \u0022action\u0022: \u0022remove\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022:attachmentId\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the attachment\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessAttachment\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that attachment or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222017.07\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v3/posts/:id/attachments/thumbnails\u0022,\r\n \u0022authtypes\u0022: [\r\n \u0022Email\u0022,\r\n \u0022Basic\u0022,\r\n \u0022Bearer\u0022,\r\n \u0022Board\u0022,\r\n \u0022Cookie\u0022,\r\n \u0022SecretPost\u0022\r\n ],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Get thumbnail preview images for this post\u0027s attachments\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022v3_attachment_thumbnails\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022limit\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Limit to this many results. Max of 100.\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Notice\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateMax\u0022,\r\n \u0022args\u0022: [100]\r\n },\r\n \u0022message\u0022: \u0022The maximum value for \u0060limit\u0060 is 100. Using 100 for the limit.\u0022,\r\n \u0022field\u0022: \u0022limit\u0022\r\n }\r\n ],\r\n \u0022default\u0022: 10,\r\n \u0022example\u0022: 5\r\n },\r\n {\r\n \u0022name\u0022: \u0022page\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return this page of results.\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Notice\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateMin\u0022,\r\n \u0022args\u0022: [1]\r\n },\r\n \u0022message\u0022: \u0022The minimum value for \u0060page\u0060 is 1. Using 1 for the page.\u0022,\r\n \u0022field\u0022: \u0022page\u0022\r\n }\r\n ],\r\n \u0022default\u0022: 1,\r\n \u0022example\u0022: 3\r\n }\r\n ],\r\n \u0022since\u0022: \u00222017.12\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v3/posts/:id/attachments/previews\u0022,\r\n \u0022authtypes\u0022: [\r\n \u0022Email\u0022,\r\n \u0022Basic\u0022,\r\n \u0022Bearer\u0022,\r\n \u0022Board\u0022,\r\n \u0022Cookie\u0022,\r\n \u0022SecretPost\u0022\r\n ],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Get full-size preview images for this post\u0027s attachments\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022v3_attachment_previews\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022limit\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Limit to this many results. Max of 100.\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Notice\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateMax\u0022,\r\n \u0022args\u0022: [100]\r\n },\r\n \u0022message\u0022: \u0022The maximum value for \u0060limit\u0060 is 100. Using 100 for the limit.\u0022,\r\n \u0022field\u0022: \u0022limit\u0022\r\n }\r\n ],\r\n \u0022default\u0022: 10,\r\n \u0022example\u0022: 5\r\n },\r\n {\r\n \u0022name\u0022: \u0022page\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return this page of results.\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Notice\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateMin\u0022,\r\n \u0022args\u0022: [1]\r\n },\r\n \u0022message\u0022: \u0022The minimum value for \u0060page\u0060 is 1. Using 1 for the page.\u0022,\r\n \u0022field\u0022: \u0022page\u0022\r\n }\r\n ],\r\n \u0022default\u0022: 1,\r\n \u0022example\u0022: 3\r\n }\r\n ],\r\n \u0022since\u0022: \u00222017.12\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v3/posts/:id/attachments/details\u0022,\r\n \u0022authtypes\u0022: [\r\n \u0022Basic\u0022,\r\n \u0022Bearer\u0022,\r\n \u0022Board\u0022,\r\n \u0022Cookie\u0022,\r\n \u0022Email\u0022,\r\n \u0022SecretPost\u0022\r\n ],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Get attachment data and previews for this post\u0027s attachments\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022v3_attachment_details\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00223.0\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v3/posts/:id/attachments\u0022,\r\n \u0022authtypes\u0022: [\r\n \u0022Basic\u0022,\r\n \u0022Bearer\u0022,\r\n \u0022Board\u0022,\r\n \u0022Cookie\u0022,\r\n \u0022Email\u0022,\r\n \u0022SecretPost\u0022\r\n ],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Get basic info for this post\u0027s attachments\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022v3_attachments\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00223.0\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022PUT\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/attachments/sort\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Set the sort order for the given attachments\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022attachments_sort\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022ids\u0022,\r\n \u0022type\u0022: \u0022Number[]\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ids of the attachments in the desired order\u0022,\r\n \u0022example\u0022: \u0022[123,125,124]\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222021.01\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022posts/:id/comments\u0022,\r\n \u0022description\u0022: \u0022View, add, edit and delete comments.\u0022,\r\n \u0022endpoints\u0022: [\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/comments\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022, \u0022SecretPost\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Get all the comments associated with the given post\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_comments\u0022,\r\n \u0022action\u0022: \u0022index\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222014.06\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/comments\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Create a comment for the given post ID.\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_comments\u0022,\r\n \u0022permission\u0022: [\u0022add_comments\u0022],\r\n \u0022action\u0022: \u0022add_edit\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022text\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The comment text\u0022,\r\n \u0022example\u0022: \u0022This is great intel\u0022,\r\n \u0022logging\u0022: {\r\n \u0022maxlen\u0022: 2000\r\n },\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Notice\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateTruncateAt\u0022,\r\n \u0022args\u0022: [2000]\r\n },\r\n \u0022message\u0022: \u0022text was truncated at 2000 characters.\u0022,\r\n \u0022field\u0022: \u0022text\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022date_created\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The date the comment was created. Defaults to the current date and time.\u0022,\r\n \u0022example\u0022: \u00222014-04-25T23:09:58\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022commenter\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The ID of the user who made the comment\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateUserInInstance\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022That commenter is not a known user\u0022,\r\n \u0022field\u0022: \u0022commenter\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022since\u0022: \u00222014.06\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/comments/:commentId/mentions\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Send a notification to a user or group of users\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_comments\u0022,\r\n \u0022action\u0022: \u0022comment_mentions\u0022,\r\n \u0022permission\u0022: [\u0022mention_users\u0022],\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022:commentId\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022This ID of the comment\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022user_ids\u0022,\r\n \u0022type\u0022: \u0022Array\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ids of the users to be notified\u0022,\r\n \u0022example\u0022: \u0022[1,2]\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222.16\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/comments/:commentId\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Fetch a comment for the given post ID and comment ID\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_comments\u0022,\r\n \u0022action\u0022: \u0022view\u0022,\r\n \u0022permission\u0022: [],\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022You do not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022:commentId\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the comment\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222014.06\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022PATCH\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/comments/:commentId\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Update a particular comment for the given post ID.\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_comments\u0022,\r\n \u0022action\u0022: \u0022add_edit\u0022,\r\n \u0022permission\u0022: [],\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022You not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022:commentId\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the comment\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022class\u0022: \u0022CommentValidator\u0022,\r\n \u0022name\u0022: \u0022canEditOrDelete\u0022\r\n },\r\n \u0022type\u0022: \u0022NotAllowed\u0022,\r\n \u0022message\u0022: \u0022You are not allowed to edit this comment.\u0022,\r\n \u0022field\u0022: \u0022:commentId\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022text\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The comment text\u0022,\r\n \u0022example\u0022: \u0022This is great intel\u0022,\r\n \u0022logging\u0022: {\r\n \u0022maxlen\u0022: 2000\r\n },\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Notice\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateTruncateAt\u0022,\r\n \u0022args\u0022: [2000]\r\n },\r\n \u0022message\u0022: \u0022text was truncated at 2000 characters.\u0022,\r\n \u0022field\u0022: \u0022text\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022date_created\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The date the comment was created. Defaults to the current date and time.\u0022,\r\n \u0022example\u0022: \u00222014-04-25T23:09:58\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022commenter\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The ID of the user who made the comment\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateUserInInstance\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022That commenter is not a known user\u0022,\r\n \u0022field\u0022: \u0022commenter_by_id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022since\u0022: \u00222014.06\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022DELETE\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/comments/:commentId\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Delete the comment with the given ID.\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_comments\u0022,\r\n \u0022action\u0022: \u0022delete_comment\u0022,\r\n \u0022permission\u0022: [],\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022You do not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022:commentId\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the comment\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022class\u0022: \u0022CommentValidator\u0022,\r\n \u0022name\u0022: \u0022canEditOrDelete\u0022\r\n },\r\n \u0022type\u0022: \u0022NotAllowed\u0022,\r\n \u0022message\u0022: \u0022You are not allowed to delete this comment.\u0022,\r\n \u0022field\u0022: \u0022:commentId\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222014.06\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022posts/:id/mentions\u0022,\r\n \u0022description\u0022: \u0022Notify a user that they have been mentioned in a post.\u0022,\r\n \u0022private\u0022: true,\r\n \u0022endpoints\u0022: [\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/mentions\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Send a notification to a user or group of users\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_mentions\u0022,\r\n \u0022action\u0022: \u0022add\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022user_ids\u0022,\r\n \u0022type\u0022: \u0022Array\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ids of the users to be notified\u0022,\r\n \u0022example\u0022: \u0022[1,2]\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222016.01\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022posts/:id/success\u0022,\r\n \u0022description\u0022: \u0022Get information associated with the successful creation of the given post id.\u0022,\r\n \u0022private\u0022: true,\r\n \u0022endpoints\u0022: [\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/success/dial\u0022,\r\n \u0022authtypes\u0022: [\u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Get the details of the success dial\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_success\u0022,\r\n \u0022action\u0022: \u0022dial\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222014.06\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022posts/:id/likes\u0022,\r\n \u0022description\u0022: \u0022Like posts and get information on the users who liked a post.\u0022,\r\n \u0022endpoints\u0022: [\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/likes\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022, \u0022SecretPost\u0022],\r\n \u0022description\u0022: \u0022Get all the likes associated with the given post\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_likes\u0022,\r\n \u0022action\u0022: \u0022index\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222014.06\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/likes\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Create a like for the given post ID.\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_likes\u0022,\r\n \u0022action\u0022: \u0022add\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022date_created\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The date the like was created. Defaults to the current date and time.\u0022,\r\n \u0022example\u0022: \u00222014-04-25T23:09:58\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022user\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The ID of the user who liked the post. Defaults to the currently logged-in user.\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateUserInInstance\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022That user is not a known user\u0022,\r\n \u0022field\u0022: \u0022user\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022since\u0022: \u00222014.06\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/likes/:likeId\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Fetch a single like\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_likes\u0022,\r\n \u0022action\u0022: \u0022view\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022:likeId\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the like\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222014.06\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022DELETE\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/likes/:likeId\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Unlike a post\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_likes\u0022,\r\n \u0022action\u0022: \u0022delete\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022:likeId\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the like\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222014.06\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022posts/:id/views\u0022,\r\n \u0022description\u0022: \u0022Create and fetch post view records\u0022,\r\n \u0022private\u0022: false,\r\n \u0022endpoints\u0022: [\r\n {\r\n \u0022deprecated\u0022: {\r\n \u0022date\u0022: \u0022April 2021\u0022,\r\n \u0022instead\u0022: \u0022POST /v2/metrics/events with event_code of \u0027post_view\u0027\u0022\r\n },\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/views\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Board\u0022, \u0022Cookie\u0022, \u0022Email\u0022],\r\n \u0022description\u0022: \u0022Create a record of a post view\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022add_view\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022user_id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The id of the user who viewed the post. For Bearer, Cookie, Board and Email auth it defaults to the current user if not given.\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateUserInInstance\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022Unknown user\u0022,\r\n \u0022field\u0022: \u0022user_id\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022created_at\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The date the post was viewed. Defaults to the current date and time if not given.\u0022,\r\n \u0022example\u0022: \u00222014-04-26T23:03:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022board\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The hash of the story board the user clicked from.\u0022,\r\n \u0022example\u0022: \u00222014-04-26T23:03:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022referrer\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The referring page\u0022,\r\n \u0022example\u0022: \u0022https://sharpr.com/foobar\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222016.09\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022posts/:id/summary\u0022,\r\n \u0022description\u0022: \u0022Fetch and update post AI summary\u0022,\r\n \u0022endpoints\u0022: [\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/summary\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022, \u0022SecretPost\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Get the summary generated by AI\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022get_summary\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u0022Aug 2017\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022PATCH\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/summary\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Update the summary generated by AI\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022update_summary\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022text\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The new summary text\u0022,\r\n \u0022example\u0022: \u0022Sentence 1.\\n\\nSentence 2.\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u0022Aug 2017\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022posts/:id/keywords\u0022,\r\n \u0022description\u0022: \u0022Manage ai keywords\u0022,\r\n \u0022since\u0022: \u00222017.07\u0022,\r\n \u0022endpoints\u0022: [\r\n {\r\n \u0022verb\u0022: \u0022PUT\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/keywords\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Clear out existing keywords and associate one or more keywords with the given post\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022put_keywords\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022keywords\u0022,\r\n \u0022type\u0022: \u0022Object[]\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022List of keywords, each containing a string \u0060keyword\u0060 and a number \u0060relevance\u0060\u0022,\r\n \u0022example\u0022: \u0022[{\\\u0022keyword\\\u0022:\\\u0022politics\\\u0022,\\\u0022relevance\\\u0022:0.85234}]\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222017.07\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/keywords\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Associate one or more keywords with the given post\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022add_keywords\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022keywords\u0022,\r\n \u0022type\u0022: \u0022Object[]\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022List of keywords, each containing a string \u0060keyword\u0060 and a number \u0060relevance\u0060\u0022,\r\n \u0022example\u0022: \u0022[{\\\u0022keyword\\\u0022:\\\u0022politics\\\u0022,\\\u0022relevance\\\u0022:0.85234}]\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222017.07\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/keywords\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Get keywords generated by AI\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022get_keywords\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222017.07\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022DELETE\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/keywords/:keywordText\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Delete an AI keyword\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022delete_keyword\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022:keywordText\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The keyword to remove (not case sensitive)\u0022,\r\n \u0022example\u0022: \u0022Politics\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222017.07\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022posts/:id/taxonomies\u0022,\r\n \u0022description\u0022: \u0022Manage post taxonomies\u0022,\r\n \u0022since\u0022: \u00222020.10\u0022,\r\n \u0022endpoints\u0022: [\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/taxonomies\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022, \u0022SecretPost\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Get post taxonomies\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_taxonomies\u0022,\r\n \u0022action\u0022: \u0022get_taxonomies\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222020.10\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022PATCH\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/taxonomies\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Update post taxonomies\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_taxonomies\u0022,\r\n \u0022action\u0022: \u0022update_taxonomies\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022selected_option_ids\u0022,\r\n \u0022type\u0022: \u0022Number[]\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022Ids of the options selected for criteria related to the post.\u0022,\r\n \u0022example\u0022: \u00222, 3, 5, 7, 11, 13\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222020.10\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022posts/:id/contributors\u0022,\r\n \u0022description\u0022: \u0022Manage post contributors\u0022,\r\n \u0022since\u0022: \u00222020.10\u0022,\r\n \u0022endpoints\u0022: [\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/contributors\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022, \u0022SecretPost\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Get post contributors\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_contributors\u0022,\r\n \u0022action\u0022: \u0022get_contributors\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: []\r\n },\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/contributors\u0022,\r\n \u0022authtypes\u0022: [\u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Add a post contributor\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_contributors\u0022,\r\n \u0022action\u0022: \u0022add_contributor\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022user_id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The user id of the contributor\u0022,\r\n \u0022example\u0022: \u00221\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateUserInInstance\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022Unknown user\u0022,\r\n \u0022field\u0022: \u0022user_id\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022contributor_duty_id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The contributor duty id for the user\u0022,\r\n \u0022example\u0022: \u00227\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateContributorDutyInInstance\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022Unknown contributor duty\u0022,\r\n \u0022field\u0022: \u0022contributor_duty_id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022since\u0022: \u00222020.11\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022DELETE\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/contributors/:contributorId\u0022,\r\n \u0022authtypes\u0022: [\u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Add a post contributor\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_contributors\u0022,\r\n \u0022action\u0022: \u0022delete_contributor\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022:contributorId\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post contributor id\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222020.11\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/contributors/:contributorId/approve\u0022,\r\n \u0022authtypes\u0022: [\u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Approve a post\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_contributors\u0022,\r\n \u0022action\u0022: \u0022approve_post\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022:contributorId\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post contributor id\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222020.11\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/contributors/me\u0022,\r\n \u0022authtypes\u0022: [\u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Get information about your contributor and role\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_contributors\u0022,\r\n \u0022action\u0022: \u0022contributor_me\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222020.11\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/contributors/actions_and_feedback\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Get the actions and comments of post contributors\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_contributors\u0022,\r\n \u0022action\u0022: \u0022get_actions_and_feedback\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: []\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022posts/:id/priority\u0022,\r\n \u0022description\u0022: \u0022Handle pinning and unpinning of posts\u0022,\r\n \u0022since\u0022: \u00222018.01\u0022,\r\n \u0022endpoints\u0022: [\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/priority/pin\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Pin a post to the top of the intel tab\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_priority\u0022,\r\n \u0022action\u0022: \u0022pin\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222018.01\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/priority/unpin\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Unpin a post from the intel tab\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_priority\u0022,\r\n \u0022action\u0022: \u0022unpin\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222018.01\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022posts/:id/preferences\u0022,\r\n \u0022description\u0022: \u0022Handle preferences related to posts\u0022,\r\n \u0022since\u0022: \u00222020.03\u0022,\r\n \u0022endpoints\u0022: [\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/preferences\u0022,\r\n \u0022authtypes\u0022: [\u0022Email\u0022, \u0022Bearer\u0022, \u0022Board\u0022, \u0022Cookie\u0022, \u0022SecretPost\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Get all preferences related to the given post. Returns the same data as GET /v2/config/preferences\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_config\u0022,\r\n \u0022action\u0022: \u0022preferences_for_post\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222020.03\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022posts\u0022,\r\n \u0022description\u0022: \u0022Read, add, update, delete and search published posts.\u0022,\r\n \u0022endpoints\u0022: [\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/scrape\u0022,\r\n \u0022authtypes\u0022: [\u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Get article data from a URL\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022scrape\u0022,\r\n \u0022private\u0022: true,\r\n \u0022named\u0022: [],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022article_url\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The url of the article\u0022,\r\n \u0022example\u0022: \u0022http://url.to/article\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222016.09\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/reindex\u0022,\r\n \u0022authtypes\u0022: [\u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Reindex post on ElasticSearch\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022reindex\u0022,\r\n \u0022permission\u0022: [\u0022all\u0022],\r\n \u0022private\u0022: true,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222018.09\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/search\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Trusted\u0022],\r\n \u0022multihub\u0022: true,\r\n \u0022description\u0022: \u0022Get a list of posts that match the given criteria\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022search\u0022,\r\n \u0022named\u0022: [],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022term\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022A search term\u0022,\r\n \u0022example\u0022: \u0022\u0060Sony Television\u0060 OR \u0060Sony\u0060\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022tags\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022One or more tags\u0022,\r\n \u0022example\u0022: \u0022\u0060sony \u002B tv\u0060 OR \u0060sony, tv\u0060\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022category_id\u0022,\r\n \u0022map_to\u0022: \u0022currentCategory\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022type\u0022: \u0022Number[]\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022One or more category IDs separated by commas\u0022,\r\n \u0022example\u0022: \u0022123,124\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022domain_names\u0022,\r\n \u0022type\u0022: \u0022String[]\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022A comma-separated list of domain names that the post source must come from. Source subdomains are ignored so restricting to \u0060money.cnn.com\u0060, for example, will match no posts, but \u0060cnn.com\u0060 might.\u0022,\r\n \u0022example\u0022: \u0022youtube.com,youtu.be\u0022,\r\n \u0022since\u0022: \u00222016.05\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022client_intel\u0022,\r\n \u0022map_to\u0022: \u0022isExecutive\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return client view posts only\u0022,\r\n \u0022example\u0022: \u0022true\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022submitter\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts submitted by this user ID\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022publisher\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts with intel text written by this user ID\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022in_story\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022If true, limit to posts that have been used in stories. If false, limit to posts that have not been used in stories. Leave empty to include all posts.\u0022,\r\n \u0022example\u0022: \u0022true\u0022,\r\n \u0022since\u0022: \u00222016.05\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022was_emailed\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022If true, limit to posts that have been sent in an email brief. If false, limit to posts that have not been sent in an email breif. Leave empty to include all posts.\u0022,\r\n \u0022example\u0022: \u0022true\u0022,\r\n \u0022since\u0022: \u00222016.05\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022untagged\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022If true, limit to posts that have no tags. If false or empty, include all posts.\u0022,\r\n \u0022example\u0022: \u0022true\u0022,\r\n \u0022since\u0022: \u00222016.05\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022no_insight\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022If true, limit to posts that have no insight text. If false or empty, include all posts.\u0022,\r\n \u0022example\u0022: \u0022true\u0022,\r\n \u0022since\u0022: \u00222016.05\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022since_date\u0022,\r\n \u0022map_to\u0022: \u0022newerThan\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that were published after this date\u0022,\r\n \u0022example\u0022: \u00222014-03-25T00:00:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022before_date\u0022,\r\n \u0022map_to\u0022: \u0022olderThan\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that were published before this date\u0022,\r\n \u0022example\u0022: \u00222014-03-26T00:00:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022since_modified_date\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that were modified after this date\u0022,\r\n \u0022example\u0022: \u00222016-03-25T00:00:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022before_modified_date\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that were modified before this date\u0022,\r\n \u0022example\u0022: \u00222016-03-26T00:00:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022since_id\u0022,\r\n \u0022map_to\u0022: \u0022sinceId\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts with ids that are greater than since_id\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022before_id\u0022,\r\n \u0022map_to\u0022: \u0022beforeId\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts with ids that are less than before_id\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022date_preset\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts for a preset date range\u0022,\r\n \u0022example\u0022: \u0022Last 7 days, Last 30 days, This calendar week, Last calendar week, This calendar month, Last calendar month\u0022,\r\n \u0022enum\u0022: [\r\n \u0022Last 7 days\u0022,\r\n \u0022Last 30 days\u0022,\r\n \u0022This calendar week\u0022,\r\n \u0022Last calendar week\u0022,\r\n \u0022This calendar month\u0022,\r\n \u0022Last calendar month\u0022,\r\n \u0022custom\u0022\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022ids\u0022,\r\n \u0022map_to\u0022: \u0022post_ids\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022type\u0022: \u0022Number[]\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Comma separated list of IDs to fetch\u0022,\r\n \u0022example\u0022: \u0022123,124,125\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022not_ids\u0022,\r\n \u0022map_to\u0022: \u0022excludeIds\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022type\u0022: \u0022Number[]\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Comma separated list of IDs to exclude\u0022,\r\n \u0022example\u0022: \u0022123,124,125\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022order_by\u0022,\r\n \u0022map_to\u0022: \u0022order\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Sort by either \u0060publish_date\u0060, \u0060created\u0060, or \u0060modified\u0060\u0022,\r\n \u0022enum\u0022: [\u0022publish_date\u0022, \u0022created\u0022, \u0022modified\u0022],\r\n \u0022default\u0022: \u0022publish_date\u0022,\r\n \u0022example\u0022: \u0022publish_date\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022limit\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Limit to this many results. Max of 100.\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Notice\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateMax\u0022,\r\n \u0022args\u0022: [100]\r\n },\r\n \u0022message\u0022: \u0022The maximum value for \u0060limit\u0060 is 100. Using 100 for the limit.\u0022,\r\n \u0022field\u0022: \u0022limit\u0022\r\n }\r\n ],\r\n \u0022default\u0022: 25,\r\n \u0022example\u0022: 5\r\n },\r\n {\r\n \u0022name\u0022: \u0022page\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return this page of results.\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Notice\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateMin\u0022,\r\n \u0022args\u0022: [1]\r\n },\r\n \u0022message\u0022: \u0022The minimum value for \u0060page\u0060 is 1. Using 1 for the page.\u0022,\r\n \u0022field\u0022: \u0022page\u0022\r\n }\r\n ],\r\n \u0022default\u0022: 1,\r\n \u0022example\u0022: 3\r\n },\r\n {\r\n \u0022name\u0022: \u0022count_only\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022If true, return a count of results as \\\u0022count\\\u0022, not an array of posts.\u0022,\r\n \u0022default\u0022: false,\r\n \u0022example\u0022: \u0022true\u0022,\r\n \u0022since\u0022: \u00222016.05\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022exclude_copied\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Exclude posts from search results if they have been copied to hubs with these ids.\u0022,\r\n \u0022example\u0022: \u0022123,456,789\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022approval_status\u0022,\r\n \u0022map_to\u0022: \u0022approvalStatus\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Limit search results by approval status. Valid options are \\\u0022approved\\\u0022 or \\\u0022unapproved\\\u0022.\u0022,\r\n \u0022example\u0022: \u0022approved\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022classification_id\u0022,\r\n \u0022map_to\u0022: \u0022classificationId\u0022,\r\n \u0022type\u0022: \u0022Number[]\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022One or more classification IDs separated by commas.\u0022,\r\n \u0022example\u0022: \u00227,1002\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022submission_medium\u0022,\r\n \u0022type\u0022: \u0022String[]\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The submission medium or media to include in results. Must be one or more of the following: app, mobile, email, intel, bookmarklet, screenshot, api, ifttt, news_feed, unknown.\u0022,\r\n \u0022enum\u0022: [\r\n \u0022app\u0022,\r\n \u0022mobile\u0022,\r\n \u0022email\u0022,\r\n \u0022intel\u0022,\r\n \u0022bookmarklet\u0022,\r\n \u0022screenshot\u0022,\r\n \u0022api\u0022,\r\n \u0022ifttt\u0022,\r\n \u0022news_feed\u0022,\r\n \u0022msteams\u0022,\r\n \u0022ext_source\u0022,\r\n \u0022unknown\u0022\r\n ],\r\n \u0022example\u0022: \u0022\\\u0022desktop\\\u0022 or \\\u0022desktop,mobile\\\u0022\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022thread_id\u0022,\r\n \u0022type\u0022: \u0022String[]\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The id or ids used to track copied posts.\u0022,\r\n \u0022example\u0022: \u0022E98A9DDD-2E52-481D-8486-37BF5886F0DF,D98A9EEE-2E52-481D-8486-37BF5886F0DF\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022submitted_from\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Limit results to posts that were submitted from a specific geographic location. You can request a country, a country \u002B state/province, or a country \u002B state/province \u002B city. Param parts are delimited by colons, i.e., Two-letter country code:State/Province name:City name.\u0022,\r\n \u0022example\u0022: \u0022These are all valid values: \u0027US\u0027, \u0027US:California\u0027, \u0027US:Texas:Dallas\u0027, \u0027US:California|Oregon|Washington\u0027 (includes results from California, Oregon, or Washington), France::Paris (region name is not required when querying for a city)\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222014.06\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v3/posts/search/suggest\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022multihub\u0022: true,\r\n \u0022description\u0022: \u0022Get search suggestions based on the current search phrase.\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: false,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022v3_search_suggest\u0022,\r\n \u0022named\u0022: [],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022term\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022A search term/phrase or partial term/phrase\u0022,\r\n \u0022example\u0022: \u0022Mobile phone\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022limit\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Limit to this many results. Max of 25.\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Notice\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateMax\u0022,\r\n \u0022args\u0022: [25]\r\n },\r\n \u0022message\u0022: \u0022The maximum value for \u0060limit\u0060 is 25. Using 25 for the limit.\u0022,\r\n \u0022field\u0022: \u0022limit\u0022\r\n }\r\n ],\r\n \u0022default\u0022: 10,\r\n \u0022example\u0022: 5\r\n }\r\n ],\r\n \u0022since\u0022: \u00222020.07\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v3/posts/search\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Trusted\u0022],\r\n \u0022multihub\u0022: true,\r\n \u0022description\u0022: \u0022Get a list of posts that match the given criteria\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: false,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022v3_search\u0022,\r\n \u0022permission\u0022: [\u0022login\u0022],\r\n \u0022named\u0022: [],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022term\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022A search term\u0022,\r\n \u0022example\u0022: \u0022\u0060Sony Television\u0060 OR \u0060Sony\u0060\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022tags\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022One or more tags\u0022,\r\n \u0022example\u0022: \u0022\u0060sony \u002B tv\u0060 OR \u0060sony, tv\u0060\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022ai_tags\u0022,\r\n \u0022type\u0022: \u0022String[]\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022A comma-separated list of AI tags. AI tags are auto-generated keywords based on the post\u0027s full text value.\u0022,\r\n \u0022example\u0022: \u0022rainforest,waterfall\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022category_id\u0022,\r\n \u0022map_to\u0022: \u0022currentCategory\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022type\u0022: \u0022Number[]\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022One or more category IDs separated by commas\u0022,\r\n \u0022example\u0022: \u0022123,124\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022category_names\u0022,\r\n \u0022type\u0022: \u0022String[]\u0022,\r\n \u0022separator\u0022: \u0022;\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022A semi-colon-separated list of category names.\u0022,\r\n \u0022example\u0022: \u0022finance;business;New York City, New York\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022domain_names\u0022,\r\n \u0022type\u0022: \u0022String[]\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022A comma-separated list of domain names that the post source must come from. Source subdomains are ignored so restricting to \u0060money.cnn.com\u0060, for example, will match no posts, but \u0060cnn.com\u0060 might.\u0022,\r\n \u0022example\u0022: \u0022youtube.com,youtu.be\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022client_intel\u0022,\r\n \u0022map_to\u0022: \u0022isExecutive\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return client view posts only\u0022,\r\n \u0022example\u0022: \u0022true\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022submitter\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022type\u0022: \u0022Number[]\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts submitted by this user ID\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022publisher\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022type\u0022: \u0022Number[]\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts with intel text written by this user ID\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022publisher_roles\u0022,\r\n \u0022type\u0022: \u0022String[]\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022A comma-separated list of post publisher roles to filter by.\u0022,\r\n \u0022example\u0022: \u0022member,intel leader\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022publisher_domains\u0022,\r\n \u0022type\u0022: \u0022String[]\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022A comma-separated list of email address domains to filter by.\u0022,\r\n \u0022example\u0022: \u0022@example.com,@sharpr.com\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022publisher_domains_treatment\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Whether the \u0060publisher_domains\u0060 should be included or excluded.\u0022,\r\n \u0022example\u0022: \u0022include\u0022,\r\n \u0022default\u0022: \u0022include\u0022,\r\n \u0022enum\u0022: [\u0022include\u0022, \u0022exclude\u0022]\r\n },\r\n {\r\n \u0022name\u0022: \u0022in_story\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022If true, limit to posts that have been used in stories. If false, limit to posts that have not been used in stories. Leave empty to include all posts.\u0022,\r\n \u0022example\u0022: \u0022true\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022was_emailed\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022If true, limit to posts that have been sent in an email brief. If false, limit to posts that have not been sent in an email breif. Leave empty to include all posts.\u0022,\r\n \u0022example\u0022: \u0022true\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022untagged\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022If true, limit to posts that have no tags. If false or empty, include all posts.\u0022,\r\n \u0022example\u0022: \u0022true\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022no_insight\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022If true, limit to posts that have no insight text. If false or empty, include all posts.\u0022,\r\n \u0022example\u0022: \u0022true\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022since_date\u0022,\r\n \u0022map_to\u0022: \u0022newerThan\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that were published after this date\u0022,\r\n \u0022example\u0022: \u00222014-03-25T00:00:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022before_date\u0022,\r\n \u0022map_to\u0022: \u0022olderThan\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that were published before this date\u0022,\r\n \u0022example\u0022: \u00222014-03-26T00:00:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022since_created_date\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that were *created* after this date\u0022,\r\n \u0022example\u0022: \u00222014-03-25T00:00:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022before_created_date\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that were *created* before this date\u0022,\r\n \u0022example\u0022: \u00222014-03-26T00:00:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022since_processed_date\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that finished processing attachments after this date\u0022,\r\n \u0022example\u0022: \u00222014-03-25T00:00:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022before_processed_date\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that finished processing attachments before this date\u0022,\r\n \u0022example\u0022: \u00222014-03-26T00:00:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022since_modified_date\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that were modified after this date\u0022,\r\n \u0022example\u0022: \u00222016-03-25T00:00:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022before_modified_date\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that were modified before this date\u0022,\r\n \u0022example\u0022: \u00222016-03-26T00:00:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022since_id\u0022,\r\n \u0022map_to\u0022: \u0022sinceId\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts with ids that are greater than since_id\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022before_id\u0022,\r\n \u0022map_to\u0022: \u0022beforeId\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts with ids that are less than before_id\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022date_preset\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts for a preset date range\u0022,\r\n \u0022example\u0022: \u0022Last 7 days, Last 30 days, This calendar week, Last calendar week, This calendar month, Last calendar month\u0022,\r\n \u0022enum\u0022: [\r\n \u0022Last 7 days\u0022,\r\n \u0022Last 30 days\u0022,\r\n \u0022This calendar week\u0022,\r\n \u0022Last calendar week\u0022,\r\n \u0022This calendar month\u0022,\r\n \u0022Last calendar month\u0022,\r\n \u0022custom\u0022\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022ids\u0022,\r\n \u0022map_to\u0022: \u0022post_ids\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022type\u0022: \u0022Number[]\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Comma separated list of IDs to fetch\u0022,\r\n \u0022example\u0022: \u0022123,124,125\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022not_ids\u0022,\r\n \u0022map_to\u0022: \u0022excludeIds\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022type\u0022: \u0022Number[]\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Comma separated list of IDs to exclude\u0022,\r\n \u0022example\u0022: \u0022123,124,125\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022order_by\u0022,\r\n \u0022map_to\u0022: \u0022order\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Which field to sort on. Options: score, publish_date, created, modified, ids\u0022,\r\n \u0022enum\u0022: [\r\n \u0022score\u0022,\r\n \u0022publish_date\u0022,\r\n \u0022created\u0022,\r\n \u0022modified\u0022,\r\n \u0022ids\u0022,\r\n \u0022score_date_weighted\u0022\r\n ],\r\n \u0022default\u0022: \u0022score\u0022,\r\n \u0022example\u0022: \u0022publish_date\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022limit\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Limit to this many results. Max of 100.\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Notice\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateMax\u0022,\r\n \u0022args\u0022: [100]\r\n },\r\n \u0022message\u0022: \u0022The maximum value for \u0060limit\u0060 is 100. Using 100 for the limit.\u0022,\r\n \u0022field\u0022: \u0022limit\u0022\r\n }\r\n ],\r\n \u0022default\u0022: 25,\r\n \u0022example\u0022: 5\r\n },\r\n {\r\n \u0022name\u0022: \u0022page\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return this page of results.\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Notice\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateMin\u0022,\r\n \u0022args\u0022: [1]\r\n },\r\n \u0022message\u0022: \u0022The minimum value for \u0060page\u0060 is 1. Using 1 for the page.\u0022,\r\n \u0022field\u0022: \u0022page\u0022\r\n }\r\n ],\r\n \u0022default\u0022: 1,\r\n \u0022example\u0022: 3\r\n },\r\n {\r\n \u0022name\u0022: \u0022count_only\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022If true, return a count of results as \\\u0022count\\\u0022, not an array of posts.\u0022,\r\n \u0022default\u0022: false,\r\n \u0022example\u0022: \u0022true\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022exclude_copied\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022type\u0022: \u0022Number[]\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Exclude posts from search results if they have been copied to hubs with these ids.\u0022,\r\n \u0022example\u0022: \u0022123,456,789\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022approval_status\u0022,\r\n \u0022map_to\u0022: \u0022approvalStatus\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Limit search results by approval status. Valid options are \\\u0022approved\\\u0022 or \\\u0022unapproved\\\u0022.\u0022,\r\n \u0022example\u0022: \u0022approved\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022classification_id\u0022,\r\n \u0022map_to\u0022: \u0022classificationId\u0022,\r\n \u0022type\u0022: \u0022Number[]\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022One or more classification IDs separated by commas.\u0022,\r\n \u0022example\u0022: \u00227,1002\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022classification_names\u0022,\r\n \u0022type\u0022: \u0022String[]\u0022,\r\n \u0022separator\u0022: \u0022;\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022A semi-colon-separated list of classifications names.\u0022,\r\n \u0022example\u0022: \u0022finance;business;New York City, New York\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022submission_medium\u0022,\r\n \u0022type\u0022: \u0022String[]\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The submission medium or media to include in results. Must be one or more of the following: app, mobile, email, intel, bookmarklet, screenshot, api, ifttt, news_feed, unknown.\u0022,\r\n \u0022enum\u0022: [\r\n \u0022app\u0022,\r\n \u0022mobile\u0022,\r\n \u0022email\u0022,\r\n \u0022intel\u0022,\r\n \u0022bookmarklet\u0022,\r\n \u0022screenshot\u0022,\r\n \u0022api\u0022,\r\n \u0022ifttt\u0022,\r\n \u0022news_feed\u0022,\r\n \u0022msteams\u0022,\r\n \u0022ext_source\u0022,\r\n \u0022unknown\u0022\r\n ],\r\n \u0022example\u0022: \u0022\u0027desktop\u0027 or \u0027desktop,mobile\u0027\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022thread_id\u0022,\r\n \u0022type\u0022: \u0022String[]\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The id or ids used to track copied posts.\u0022,\r\n \u0022example\u0022: \u0022E98A9DDD-2E52-481D-8486-37BF5886F0DF,D98A9EEE-2E52-481D-8486-37BF5886F0DF\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022submitted_from\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Limit results to posts that were submitted from a specific geographic location. You can request a country, a country \u002B state/province, or a country \u002B state/province \u002B city. Param parts are delimited by colons, i.e., Two-letter country code:State/Province name:City name.\u0022,\r\n \u0022example\u0022: \u0022These are all valid values: \u0027US\u0027, \u0027US:California\u0027, \u0027US:Texas:Dallas\u0027, \u0027US:California|Oregon|Washington\u0027 (includes results from California, Oregon, or Washington), France::Paris (region name is not required when querying for a city)\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022respect_pins\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022If true, return pinned posts as first posts\u0022,\r\n \u0022example\u0022: \u0022true\u0022,\r\n \u0022default\u0022: false,\r\n \u0022since\u0022: \u00222018.01\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022calculate_total\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022If false, avoid counting all records that matched.\u0022,\r\n \u0022default\u0022: true,\r\n \u0022example\u0022: \u0022false\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022engine\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022If set, use the specified search engine. Either \\\u0022db\\\u0022 for Classic or \\\u0022es\\\u0022 for Advanced.\u0022,\r\n \u0022example\u0022: \u0022es\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022term_behavior\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Multiple search terms should \\\u0022narrow\\\u0022 or \\\u0022expand\\\u0022 results. Default is \\\u0022expand\\\u0022. Only applicable to \\\u0022es\\\u0022 engine.\u0022,\r\n \u0022default\u0022: \u0022expand\u0022,\r\n \u0022enum\u0022: [\u0022narrow\u0022, \u0022expand\u0022],\r\n \u0022example\u0022: \u0022expand\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022archive_since_date\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The date the archive action will take place\u0022,\r\n \u0022example\u0022: \u00222014-05-02T06:10:06\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022archive_before_date\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that were archived before this date\u0022,\r\n \u0022example\u0022: \u00222014-03-25T00:00:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022archive_action\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Type of archive action that we want the archive date preset to apply to. \u0060destroy\u0060, \u0060archive\u0060, or \u0060both\u0060\u0022,\r\n \u0022example\u0022: \u0022archive\u0022,\r\n \u0022enum\u0022: [\u0022destroy\u0022, \u0022archive\u0022, \u0022both\u0022, \u0022active_and_archived\u0022]\r\n },\r\n {\r\n \u0022name\u0022: \u0022includeDeleted\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Note: only having includeDeleted without archive_action will not get archived posts.\u0022,\r\n \u0022example\u0022: \u0022true\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022liked_by\u0022,\r\n \u0022type\u0022: \u0022String[]\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022One or more userIds of who liked a post separated by commas, or \\\u0022me\\\u0022.\u0022,\r\n \u0022example\u0022: \u0022123,321\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222018.10\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/keywords\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Get keywords generated by AI\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022keywords\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222017.07\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/summary\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Email\u0022],\r\n \u0022multihub\u0022: false,\r\n \u0022description\u0022: \u0022Get the summary generated by AI\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022summary\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The post id\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222017.07\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/uncurated\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022multihub\u0022: true,\r\n \u0022description\u0022: \u0022Get a list of uncurated/unpublished posts that match the given criteria\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022uncurated\u0022,\r\n \u0022permission\u0022: [\u0022publish\u0022],\r\n \u0022named\u0022: [],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022term\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022A search term\u0022,\r\n \u0022example\u0022: \u0022\u0060Sony Television\u0060 OR \u0060Sony\u0060\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022submitter\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts submitted by this user ID\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022publisher\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts with intel text written by this user ID\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022data_feed\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022map_to\u0022: \u0022feed\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that come from the data feed with this ID\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022data_feed_group\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022map_to\u0022: \u0022feedGroup\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that come from a data feed in the data feed group with this ID\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022since_date\u0022,\r\n \u0022map_to\u0022: \u0022createdAfter\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that were published after this date\u0022,\r\n \u0022example\u0022: \u00222014-03-25T00:00:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022before_date\u0022,\r\n \u0022map_to\u0022: \u0022createdBefore\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Return only posts that were published before this date\u0022,\r\n \u0022example\u0022: \u00222014-03-26T00:00:00\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022order_by\u0022,\r\n \u0022map_to\u0022: \u0022order\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Sort by either \u0060publish_date\u0060 or \u0060created\u0060\u0022,\r\n \u0022example\u0022: \u0022publish_date\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022limit\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Limit to this many results. Max of 50.\u0022,\r\n \u0022example\u0022: \u00225\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222014.12\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/domains\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022multihub\u0022: true,\r\n \u0022description\u0022: \u0022Get a list of domain names from post sources\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022domains\u0022,\r\n \u0022named\u0022: [],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222016.05\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022multihub\u0022: true,\r\n \u0022description\u0022: \u0022Get the most recently published 25 posts. Equivalent to the Intel Tab.\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022index\u0022,\r\n \u0022named\u0022: [],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222014.06\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Trusted\u0022],\r\n \u0022description\u0022: \u0022Add a new post\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022add\u0022,\r\n \u0022permission\u0022: [\u0022submit\u0022],\r\n \u0022named\u0022: [],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022headline\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The headline\u0022,\r\n \u0022example\u0022: \u0022Some cool stuff happened\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022publish\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022True to publish the post to the Intel Tab. False to add the post to the Curate Tab.\u0022,\r\n \u0022example\u0022: \u0022true\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022intel_text\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The insight text\u0022,\r\n \u0022example\u0022: \u0022This post is important because...\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Notice\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateTruncateAt\u0022,\r\n \u0022args\u0022: [750]\r\n },\r\n \u0022message\u0022: \u0022intel_text was truncated at 750 characters.\u0022,\r\n \u0022field\u0022: \u0022intel_text\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022body\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Plain text of post. It is converted to HTML. It is overriden by \u0060rich_text_body\u0060 if both are given.\u0022,\r\n \u0022example\u0022: \u0022Here is the full story...\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022rich_text_body\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022HTML of post. It overrides \u0060body\u0060 if both are given. The following tags are allowed: p, a, span, img, b, table, tr, th, td, thead, tbody, tfoot, caption, col, em, strong, br, ul, ol, li. The following attributes are allowed: a[href], a[target] (\\\u0022_blank\\\u0022 only), img[src], img[alt].\u0022,\r\n \u0022example\u0022: \u0022\u003Cp\u003EHere is the full story...\u003C/p\u003E\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022full_text\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Full plain text from the source. Not displayed anywhere but used for searching.\u0022,\r\n \u0022example\u0022: \u0022Here is the full text from the source\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022summary\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Summary of the post full text.\u0022,\r\n \u0022example\u0022: \u0022Here is a summary of the text.\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022image\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022An image to use for the post. May be a data URI or an http URL\u0022,\r\n \u0022example\u0022: \u0022\u0060data:image/jpg;base64,abc123\u0060 OR \u0060http://example.com/image.jpg\u0060\u0022,\r\n \u0022logging\u0022: {\r\n \u0022maxlen\u0022: 500\r\n }\r\n },\r\n {\r\n \u0022name\u0022: \u0022image_credit\u0022,\r\n \u0022map_to\u0022: \u0022copyright_text\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The image credit\u0022,\r\n \u0022example\u0022: \u0022Ken Burns\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022image_license\u0022,\r\n \u0022map_to\u0022: \u0022license_link\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022A link to the license or permission from the image credit\u0022,\r\n \u0022example\u0022: \u0022http://example.com/license\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022category\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The id of the category to use for this post\u0022,\r\n \u0022example\u0022: \u00221\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022tags\u0022,\r\n \u0022type\u0022: \u0022String|Array\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022A comma-separated list of tags or an array of tags.\u0022,\r\n \u0022example\u0022: \u0022\\\u0022Science, Technology\\\u0022 OR [\\\u0022Science\\\u0022,\\\u0022Technology\\\u0022]\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022keywords\u0022,\r\n \u0022type\u0022: \u0022Object[]\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022List of keywords, each containing a string \u0060keyword\u0060 and a number \u0060relevance\u0060\u0022,\r\n \u0022example\u0022: \u0022[{\\\u0022keyword\\\u0022:\\\u0022politics\\\u0022,\\\u0022relevance\\\u0022:0.85234}]\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022submitted_by_id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The ID of the user who submitted the post\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateUserInInstance\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022That submitter is not a known user\u0022,\r\n \u0022field\u0022: \u0022submitted_by_id\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022published_by_id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The ID of the user who added Intel Text to the post\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateUserInInstance\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022That publisher is not a known user\u0022,\r\n \u0022field\u0022: \u0022published_by_id\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022published_at\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The publish date of the post. Defaults to the current date and time.\u0022,\r\n \u0022example\u0022: \u00222014-04-21T23:12:30\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022submission_medium\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The medium from which the post was submitted. Must be one or more of the following: app, mobile, email, intel, bookmarklet, screenshot, api, ifttt, news_feed, unknown.\u0022,\r\n \u0022enum\u0022: [\r\n \u0022app\u0022,\r\n \u0022mobile\u0022,\r\n \u0022email\u0022,\r\n \u0022intel\u0022,\r\n \u0022bookmarklet\u0022,\r\n \u0022screenshot\u0022,\r\n \u0022api\u0022,\r\n \u0022ifttt\u0022,\r\n \u0022news_feed\u0022,\r\n \u0022msteams\u0022,\r\n \u0022ext_source\u0022,\r\n \u0022unknown\u0022\r\n ],\r\n \u0022example\u0022: \u0022\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022source_link\u0022,\r\n \u0022map_to\u0022: \u0022url\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The URL of the source material\u0022,\r\n \u0022example\u0022: \u0022http://www.engadget.com/2014/04/11/shuhei-yoshida-interview/\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022source_name\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The name of the source\u0022,\r\n \u0022example\u0022: \u0022Engadget\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022source_author\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The author of the source material\u0022,\r\n \u0022example\u0022: \u0022Engadget Writer Guy\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022source_date\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The date of the original source. Defaults to the current date and time.\u0022,\r\n \u0022example\u0022: \u00222014-04-21T23:12:30\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022client_view\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022If true, publish to Client Intel View\u0022,\r\n \u0022example\u0022: \u0022true\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022approval_status\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Save approval status as approved or unapproved. Status only saved if Approval workflow is enabled in this hub. Valid options are \\\u0022approved\\\u0022 or \\\u0022unapproved\\\u0022. Default is \\\u0022approved\\\u0022 if submitted with Basic Auth. Otherwise, it is \\\u0022approved\\\u0022 if the authorized user is an approver.\u0022,\r\n \u0022example\u0022: \u0022approved\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022classification_id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The id of the classification for this post.\u0022,\r\n \u0022example\u0022: 7\r\n },\r\n {\r\n \u0022name\u0022: \u0022import_breadcrumbs\u0022,\r\n \u0022type\u0022: \u0022Array\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Folder breadcrumbs if post was imported from dragged folders.\u0022,\r\n \u0022example\u0022: \u0022[\\\u0022My root folder\\\u0022,\\\u0022My child folder\\\u0022,\\\u0022My grandchild folder\\\u0022]\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022import_attachment_id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The ID of the attachment if the post was imported from dragged folders.\u0022,\r\n \u0022example\u0022: \u0022123\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022notify_user_ids\u0022,\r\n \u0022type\u0022: \u0022Number[]\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Ids of users that should be notified about the new post.\u0022,\r\n \u0022example\u0022: \u00222, 3, 5, 7, 11, 13\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022archive_action\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The archive action \u0027archive\u0027 or \u0027destroy\u0027 or \u0027never\u0027\u0022,\r\n \u0022example\u0022: \u0022archive\u0022,\r\n \u0022enum\u0022: [\u0022archive\u0022, \u0022destroy\u0022, \u0022never\u0022]\r\n },\r\n {\r\n \u0022name\u0022: \u0022archive_at\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The date the archive action will take place\u0022,\r\n \u0022example\u0022: \u00222014-05-02T06:10:06\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022external_ref\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The reference value of the content on an external site.\u0022,\r\n \u0022example\u0022: \u0022abcdefg\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022budget\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Only saved in research management hubs.\u0022,\r\n \u0022example\u0022: \u002232000\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022type_id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The type of post, defaults to 1, post =\u003E 1, research brief =\u003E 2\u0022,\r\n \u0022example\u0022: \u00221\u0022,\r\n \u0022default\u0022: \u00221\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222014.06\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id\u0022,\r\n \u0022authtypes\u0022: [\r\n \u0022Basic\u0022,\r\n \u0022Bearer\u0022,\r\n \u0022Cookie\u0022,\r\n \u0022Email\u0022,\r\n \u0022Trusted\u0022,\r\n \u0022SecretPost\u0022\r\n ],\r\n \u0022description\u0022: \u0022Get data about a single post\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022view\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222014.06\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v3/posts/:id\u0022,\r\n \u0022authtypes\u0022: [\r\n \u0022Basic\u0022,\r\n \u0022Bearer\u0022,\r\n \u0022Board\u0022,\r\n \u0022Cookie\u0022,\r\n \u0022Email\u0022,\r\n \u0022SecretPost\u0022,\r\n \u0022Trusted\u0022\r\n ],\r\n \u0022description\u0022: \u0022Get data about a single post\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022private\u0022: true,\r\n \u0022multihub\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022v3_view\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022NeedPermission\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022includeDeleted\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Note: only having includeDeleted without archive_action will not get archived posts.\u0022,\r\n \u0022example\u0022: \u0022true\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022archive_action\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Type of archive action that we want the archive date preset to apply to. \u0060destroy\u0060, \u0060archive\u0060, or \u0060both\u0060\u0022,\r\n \u0022enum\u0022: [\u0022destroy\u0022, \u0022archive\u0022, \u0022both\u0022],\r\n \u0022example\u0022: \u0022archive\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00223.0\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022PATCH\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Update one or more fields on the post\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022edit\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022intel_text\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The insight text\u0022,\r\n \u0022example\u0022: \u0022This post is important because...\u0022,\r\n \u0022logging\u0022: {\r\n \u0022maxlen\u0022: 250\r\n },\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Notice\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateTruncateAt\u0022,\r\n \u0022args\u0022: [750]\r\n },\r\n \u0022message\u0022: \u0022intel_text was truncated at 750 characters.\u0022,\r\n \u0022field\u0022: \u0022intel_text\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022headline\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The headline\u0022,\r\n \u0022example\u0022: \u0022Some cool stuff happened\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022body\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Full text of post. It is converted to HTML. It is overriden by \u0060rich_text_body\u0060 if both are given.\u0022,\r\n \u0022example\u0022: \u0022Here is the full story...\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022rich_text_body\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022HTML of post. It overrides \u0060body\u0060 if both are given. The following tags are allowed: p, a, span, img, b, table, tr, th, td, thead, tbody, tfoot, caption, col, em, strong, br, ul, ol, li. The following attributes are allowed: a[href], a[target] (\\\u0022_blank\\\u0022 only), img[src], img[alt].\u0022,\r\n \u0022example\u0022: \u0022\u003Cp\u003EHere is the full story...\u003C/p\u003E\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022image\u0022,\r\n \u0022type\u0022: \u0022String|Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022An image to use for the post. May be a data URI or an http URL. Set to \u0060false\u0060 to remove the existing image.\u0022,\r\n \u0022example\u0022: \u0022\u0060data:image/png;base64,abc123\u0060 OR \u0060http://example.com/image.jpg\u0060\u0022,\r\n \u0022logging\u0022: {\r\n \u0022maxlen\u0022: 500\r\n }\r\n },\r\n {\r\n \u0022name\u0022: \u0022published_by_id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The ID of the user who added Intel Text to the post\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateUserInInstance\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022That publisher is not a known user\u0022,\r\n \u0022field\u0022: \u0022published_by_id\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022submitted_by_id\u0022,\r\n \u0022map_to\u0022: \u0022user_id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The ID of the user who created the post\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateUserInInstance\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022That submitter is not a known user\u0022,\r\n \u0022field\u0022: \u0022submitted_by_id\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022submitter_country\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The 2-letter country code from which this post was submitted.\u0022,\r\n \u0022example\u0022: \u0022US\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022submitter_region\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The state, province or region from which this post was submitted.\u0022,\r\n \u0022example\u0022: \u0022Texas\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022submitter_city\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The city from which this post was submitted.\u0022,\r\n \u0022example\u0022: \u0022Dallas\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022published_at\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The date to mark the post as published at.\u0022,\r\n \u0022example\u0022: \u00222014-05-02T06:10:06\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022created_at\u0022,\r\n \u0022map_to\u0022: \u0022created\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The date to mark the post as created at.\u0022,\r\n \u0022example\u0022: \u00222014-05-02T06:10:06\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022source_date\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The date of the source material\u0022,\r\n \u0022example\u0022: \u00222014-05-02T06:10:06\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022source_link\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The URL of the source material\u0022,\r\n \u0022example\u0022: \u0022http://www.engadget.com/2014/04/11/shuhei-yoshida-interview/\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022source_name\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The name of the source\u0022,\r\n \u0022example\u0022: \u0022Engadget\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022source_author\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The author of the source material\u0022,\r\n \u0022example\u0022: \u0022Engadget Writer Guy\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022is_client_intel\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Set to true to make the post available to clients to view\u0022,\r\n \u0022example\u0022: \u0022true\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022category\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The id of the category to use for this post. Send 0 to remove the category from the post.\u0022,\r\n \u0022example\u0022: \u00221\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022tags\u0022,\r\n \u0022type\u0022: \u0022String|Array\u0022,\r\n \u0022required\u0022: false,\r\n \u0022map_to\u0022: \u0022tag_with\u0022,\r\n \u0022description\u0022: \u0022A comma-separated list of tags or an array of tags. These will replace any tags previously associated with the post.\u0022,\r\n \u0022example\u0022: \u0022\\\u0022Science, Technology\\\u0022 OR [\\\u0022Science\\\u0022,\\\u0022Technology\\\u0022]\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022approval_status\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022default\u0022: \u0022unapproved\u0022,\r\n \u0022description\u0022: \u0022Save approval status as approved or unapproved. Status only saved if Approval workflow is enabled in this hub. Valid options are \\\u0022approved\\\u0022 or \\\u0022unapproved\\\u0022.\u0022,\r\n \u0022example\u0022: \u0022approved\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022classification_id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The id of the classification for this post.\u0022,\r\n \u0022example\u0022: 7\r\n },\r\n {\r\n \u0022name\u0022: \u0022archive_action\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The archive action \u0027archive\u0027 or \u0027destroy\u0027 or \u0027never\u0027\u0022,\r\n \u0022example\u0022: \u0022archive\u0022,\r\n \u0022enum\u0022: [\u0022archive\u0022, \u0022destroy\u0022, \u0022never\u0022]\r\n },\r\n {\r\n \u0022name\u0022: \u0022archive_at\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The date the archive action will take place\u0022,\r\n \u0022example\u0022: \u00222014-05-02T06:10:06\u002B00:00\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022budget\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Only saved on research management hubs.\u0022,\r\n \u0022example\u0022: \u002232000\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022type_id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The type of post, defaults to 1, post =\u003E 1, research brief =\u003E 2\u0022,\r\n \u0022example\u0022: \u00221\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222014.06\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022DELETE\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Delete the post with the given ID.\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022delete\u0022,\r\n \u0022permission\u0022: [\u0022delete_post\u0022],\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222014.06\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/fetch\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Fetch the contents of the given URL and create a new post\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022fetch\u0022,\r\n \u0022permission\u0022: [],\r\n \u0022named\u0022: [],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022url\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The public URL to fetch\u0022,\r\n \u0022example\u0022: \u0022https://intel.to/mclaren\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022intel_text\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The insight text\u0022,\r\n \u0022example\u0022: \u0022This post is important because...\u0022,\r\n \u0022logging\u0022: {\r\n \u0022maxlen\u0022: 250\r\n },\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Notice\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateTruncateAt\u0022,\r\n \u0022args\u0022: [750]\r\n },\r\n \u0022message\u0022: \u0022intel_text was truncated at 750 characters.\u0022,\r\n \u0022field\u0022: \u0022intel_text\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022tags\u0022,\r\n \u0022type\u0022: \u0022String|Array\u0022,\r\n \u0022required\u0022: false,\r\n \u0022map_to\u0022: \u0022tag_with\u0022,\r\n \u0022description\u0022: \u0022A comma-separated list of tags or an array of tags.\u0022,\r\n \u0022example\u0022: \u0022\\\u0022Science, Technology\\\u0022 OR [\\\u0022Science\\\u0022,\\\u0022Technology\\\u0022]\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022submitted_by_id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The ID of the user who submitted the post\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateUserInInstance\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022That submitter is not a known user\u0022,\r\n \u0022field\u0022: \u0022submitted_by_id\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022published_by_id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The ID of the user who added Intel Text to the post\u0022,\r\n \u0022example\u0022: \u0022123\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateUserInInstance\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022That publisher is not a known user\u0022,\r\n \u0022field\u0022: \u0022published_by_id\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022client_view\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022If true, publish to Client Intel View\u0022,\r\n \u0022example\u0022: \u0022true\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022publish\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022True to publish the post to the Intel Tab. False to add the post to the Curate Tab.\u0022,\r\n \u0022example\u0022: \u0022true\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222014.09\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/copy\u0022,\r\n \u0022authtypes\u0022: [\u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Attempt to copy the post with the given ID to another hub and return a report about the results.\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022copy\u0022,\r\n \u0022permission\u0022: [\u0022copy_posts\u0022],\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post to copy\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022hubs\u0022,\r\n \u0022type\u0022: \u0022Number[]\u0022,\r\n \u0022separator\u0022: \u0022,\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022An array of hub IDs to copy the post to. Any hubs that the user does not have access to will be ignored.\u0022,\r\n \u0022example\u0022: \u0022[123,456,789]\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222016.08\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/dupes\u0022,\r\n \u0022authtypes\u0022: [\u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Check if a post already exists with the given URL in any hubs in my account\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022dupes\u0022,\r\n \u0022permission\u0022: [\u0022submit\u0022],\r\n \u0022named\u0022: [],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022article_url\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The URL to check\u0022,\r\n \u0022example\u0022: \u0022http://www.bbc.com/culture/story/20170509-can-athens-become-europes-new-arts-capital\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222017.09\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022PATCH\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/archive\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Archive the post with the given ID.\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022archive\u0022,\r\n \u0022permission\u0022: [\u0022delete_post\u0022],\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222019.10\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/unarchive\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Unarchive a post and update the archive date and archive action\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022unarchive\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n }\r\n ],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022archive_action\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The archive action \u0027archive\u0027 or \u0027destroy\u0027 or \u0027never\u0022,\r\n \u0022example\u0022: \u0022archive\u0022,\r\n \u0022enum\u0022: [\u0022archive\u0022, \u0022destroy\u0022, \u0022never\u0022]\r\n },\r\n {\r\n \u0022name\u0022: \u0022archive_at\u0022,\r\n \u0022type\u0022: \u0022Date\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022The date the archive action will take place, this needs to be provided if archive_action is archive or destroy\u0022,\r\n \u0022example\u0022: \u00222014-05-02T06:10:06\u002B00:00\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222019.10\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/bulk_update\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Mass update, copy, delete, destroy, or archive posts\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022bulk_update\u0022,\r\n \u0022permission\u0022: [\u0022all\u0022],\r\n \u0022private\u0022: true,\r\n \u0022named\u0022: [],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022post_ids\u0022,\r\n \u0022type\u0022: \u0022Array\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ids of the posts to be deleted\u0022,\r\n \u0022example\u0022: \u0022[1,2]\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022action\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The action you want to take on the post ids, \\\u0022delete\\\u0022, \\\u0022destroy\\\u0022, \\\u0022archive\\\u0022, \\\u0022move\\\u0022, \\\u0022copy\\\u0022, or \\\u0022update\\\u0022\u0022,\r\n \u0022enum\u0022: [\r\n \u0022delete\u0022,\r\n \u0022destroy\u0022,\r\n \u0022archive\u0022,\r\n \u0022move\u0022,\r\n \u0022copy\u0022,\r\n \u0022update\u0022\r\n ],\r\n \u0022example\u0022: \u0022delete\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022hub_ids\u0022,\r\n \u0022type\u0022: \u0022Array\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022For \\\u0022move\\\u0022 and \\\u0022copy\\\u0022, the client ids to move/copy posts to\u0022,\r\n \u0022example\u0022: \u0022[1,2]\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222019.10\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/counts\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Get a count of all posts in this hub broken out by db, es including deleted\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022multihub\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022counts\u0022,\r\n \u0022permission\u0022: [\u0022all\u0022],\r\n \u0022private\u0022: true,\r\n \u0022named\u0022: [],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222020.03\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/translate\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Self\u0022],\r\n \u0022description\u0022: \u0022Translate post text\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022translate\u0022,\r\n \u0022permission\u0022: [\u0022submit\u0022],\r\n \u0022private\u0022: true,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n }\r\n ],\r\n \u0022since\u0022: \u00222020.06\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/translations\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022View what languages posts have been translated from in a hub\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022translations\u0022,\r\n \u0022private\u0022: true,\r\n \u0022named\u0022: [],\r\n \u0022since\u0022: \u00222020.06\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/translate\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Self\u0022],\r\n \u0022description\u0022: \u0022Translate all posts in a hub into the hub language\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022translate_hub\u0022,\r\n \u0022permission\u0022: [\u0022all\u0022],\r\n \u0022private\u0022: true,\r\n \u0022named\u0022: [],\r\n \u0022since\u0022: \u00222020.06\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/original/:language\u0022,\r\n \u0022authtypes\u0022: [\u0022Basic\u0022, \u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Get the original post text for a translated post \u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022translation_original\u0022,\r\n \u0022private\u0022: true,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022\r\n },\r\n {\r\n \u0022name\u0022: \u0022:language\u0022,\r\n \u0022type\u0022: \u0022String\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ISO 639-1 language code of the orignal text\u0022,\r\n \u0022example\u0022: \u0022es\u0022,\r\n \u0022enum\u0022: [\r\n \u0022ar\u0022,\r\n \u0022hy\u0022,\r\n \u0022eu\u0022,\r\n \u0022bg\u0022,\r\n \u0022ca\u0022,\r\n \u0022zh\u0022,\r\n \u0022ja\u0022,\r\n \u0022ko\u0022,\r\n \u0022vi\u0022,\r\n \u0022cs\u0022,\r\n \u0022da\u0022,\r\n \u0022nl\u0022,\r\n \u0022en\u0022,\r\n \u0022fi\u0022,\r\n \u0022fr\u0022,\r\n \u0022de\u0022,\r\n \u0022gl\u0022,\r\n \u0022el\u0022,\r\n \u0022hi\u0022,\r\n \u0022hu\u0022,\r\n \u0022id\u0022,\r\n \u0022ga\u0022,\r\n \u0022it\u0022,\r\n \u0022lv\u0022,\r\n \u0022lt\u0022,\r\n \u0022no\u0022,\r\n \u0022fa\u0022,\r\n \u0022pt\u0022,\r\n \u0022ro\u0022,\r\n \u0022ru\u0022,\r\n \u0022ku\u0022,\r\n \u0022es\u0022,\r\n \u0022sv\u0022,\r\n \u0022tr\u0022,\r\n \u0022th\u0022\r\n ]\r\n }\r\n ],\r\n \u0022since\u0022: \u00222020.06\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022posts/:id/secret_links\u0022,\r\n \u0022description\u0022: \u0022Get add and delete post secret links\u0022,\r\n \u0022endpoints\u0022: [\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/secret_links\u0022,\r\n \u0022authtypes\u0022: [\u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Get the secret link for the post\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_secret_links\u0022,\r\n \u0022action\u0022: \u0022getSecretLink\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222021.04\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022POST\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/secret_links\u0022,\r\n \u0022authtypes\u0022: [\u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Create a Secret Link\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_secret_links\u0022,\r\n \u0022action\u0022: \u0022create\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222021.04\u0022\r\n },\r\n {\r\n \u0022verb\u0022: \u0022DELETE\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/:id/secret_links\u0022,\r\n \u0022authtypes\u0022: [\u0022Bearer\u0022, \u0022Cookie\u0022],\r\n \u0022description\u0022: \u0022Delete a Secret Link\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_post_secret_links\u0022,\r\n \u0022action\u0022: \u0022delete\u0022,\r\n \u0022named\u0022: [\r\n {\r\n \u0022name\u0022: \u0022:id\u0022,\r\n \u0022type\u0022: \u0022Number\u0022,\r\n \u0022required\u0022: true,\r\n \u0022description\u0022: \u0022The ID of the post\u0022,\r\n \u0022example\u0022: \u00221234\u0022,\r\n \u0022validators\u0022: [\r\n {\r\n \u0022level\u0022: \u0022Error\u0022,\r\n \u0022function\u0022: {\r\n \u0022name\u0022: \u0022validateAccessPost\u0022\r\n },\r\n \u0022type\u0022: \u0022LinkedResourceNotFound\u0022,\r\n \u0022message\u0022: \u0022The user does not have access to that post or it does not exist.\u0022,\r\n \u0022field\u0022: \u0022:id\u0022\r\n }\r\n ]\r\n }\r\n ],\r\n \u0022params\u0022: [],\r\n \u0022since\u0022: \u00222021.04\u0022\r\n }\r\n ]\r\n },\r\n {\r\n \u0022name\u0022: \u0022posts/export\u0022,\r\n \u0022description\u0022: \u0022Exports of post data\u0022,\r\n \u0022endpoints\u0022: [\r\n {\r\n \u0022verb\u0022: \u0022GET\u0022,\r\n \u0022url\u0022: \u0022/v2/posts/export\u0022,\r\n \u0022authtypes\u0022: [\u0022Bearer\u0022, \u0022Cookie\u0022, \u0022Trusted\u0022],\r\n \u0022description\u0022: \u0022Export all post data for the given hub to a spreadsheet. Requests to this endpoint can take a long time on hubs with many posts. It is recommended you run this as a job.\u0022,\r\n \u0022implemented\u0022: true,\r\n \u0022controller\u0022: \u0022api_posts\u0022,\r\n \u0022action\u0022: \u0022export\u0022,\r\n \u0022named\u0022: [],\r\n \u0022params\u0022: [\r\n {\r\n \u0022name\u0022: \u0022full_text\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Should results include a full text column?\u0022,\r\n \u0022example\u0022: \u0022true\u0022,\r\n \u0022default\u0022: false\r\n },\r\n {\r\n \u0022name\u0022: \u0022attachment_names\u0022,\r\n \u0022type\u0022: \u0022Boolean\u0022,\r\n \u0022required\u0022: false,\r\n \u0022description\u0022: \u0022Should results include an attachment names column?\u0022,\r\n \u0022example\u0022: \u0022true\u0022,\r\n \u0022default\u0022: false\r\n }\r\n ],\r\n \u0022since\u0022: \u00222021.06\u0022\r\n }\r\n ]\r\n }\r\n ]\r\n}\r\n;","TestCases":[{"Name":"Produce","Code":"const result = immer.produce(state, draft =\u003E { draft.resources[14].endpoints[0].params[1].required = true })","IsDeferred":false},{"Name":"CloneDeep","Code":"const result = _.cloneDeep(state);\r\nresult.resources[14].endpoints[0].params[1].required = true;","IsDeferred":false}]}