PHPackages                             voceconnect/thermal-api - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. voceconnect/thermal-api

ActiveWordpress-plugin[API Development](/categories/api)

voceconnect/thermal-api
=======================

A JSON API that provides access to the data within WordPress

0.13.4(11y ago)14613613[18 issues](https://github.com/voceconnect/thermal-api/issues)GPL-2.0+PHPPHP &gt;=5.3.0

Since Jan 16Pushed 9y ago21 watchersCompare

[ Source](https://github.com/voceconnect/thermal-api)[ Packagist](https://packagist.org/packages/voceconnect/thermal-api)[ RSS](/packages/voceconnect-thermal-api/feed)WikiDiscussions master Synced today

READMEChangelog (4)Dependencies (2)Versions (9)Used By (0)

### Please note: This plugin is no longer being actively maintained or supported.

[](#please-note-this-plugin-is-no-longer-being-actively-maintained-or-supported)

Thermal API
===========

[](#thermal-api)

[![Build Status](https://camo.githubusercontent.com/a9890a04696252d5ab6860477a6d687c47b5de596ed14e383833a2f6b3cec3c4/68747470733a2f2f7472617669732d63692e6f72672f766f6365636f6e6e6563742f746865726d616c2d6170692e706e673f6272616e63683d6d6173746572)](https://travis-ci.org/voceconnect/thermal-api)

Current API version: v1

Overview
--------

[](#overview)

Thermal is the WordPress plugin that gives you the access and control to your content from outside of the WordPress admin. Thermal supports client-based decisions that, when combined with a responsive design framework, allows for a truly responsive application leveraging a WordPress content source.

### Versions

[](#versions)

In order to support migration, the API plugin will support up to 2 versions of the API. Once a version is more than 1 cycle old, it will no longer respond at it's API root unless configured to do so.

### API Root

[](#api-root)

The URL root of the API will be the version number of the API prefixed by your WordPress site URL and the `Voce\Thermal\API_ROOT` constant. By default this is set to `wp_api` but can be overridden by setting it in `wp-config.php`.

The current API version is v1 so the default URL root is:

```
http://example.com/wp_api/v1/

```

Resource Types
--------------

[](#resource-types)

The following resources are available

- [Posts](#posts)
- [Users](#users)
- [Taxonomies](#taxonomies)
- [Terms](#terms)
- [Rewrite Rules](#rewrite_rules)
- [Media Items](#media_items)
- [Comments](#comments)

Posts
-----

[](#posts)

A post represents a single item of content.

### Methods

[](#methods)

#### List

[](#list)

##### Request

[](#request)

```
GET {api root}/posts

```

##### Parameters

[](#parameters)

   Parameter Data Type Description      Date Filters    m string  A compressed datetime string in the format of 'YmdGis' that represents date/time range to filter posts to (.e.g 2012-01-01 13:59:59 is expressed as 20120101135959). As most right most parts of the string are left off, the filter becomes less exact.
Examples:

- 'm=2012' Only posts from 2012 will be returned; Equivalent to 'year=2012'
- 'm=201206' Only posts from June 2012 will be returned; Equivalent to 'year=2012&amp;monthnum=6'
- 'm=20120609' Only posts from June 9th, 2012 will be returned; Equivalent to 'year=2012&amp;monthnum=6&amp;day=9'

   year integer 4 digit year (e.g. 2012)   monthum integer Month number (from 1 to 12)   w integer Week of the year (from 0 to 53)   day integer Day of the month (from 0 to 31)   hour integer Hour of the day in 24 hour format (from 0 to 23)   minute integer Minute (from 0 to 59)   second integer Second (from 0 to 59)   before string A parsable formatted date string. Unless specified in the format used, the result will be relative to the timezone of the site.   after string A parsable formatted date string. Unless specified in the format used, the result will be relative to the timezone of the site.   Search Filtering   s string  Search keyword or string, by default this searches against the title and post\_content By default, the search expression is split into individual terms.    exact boolean Default false. If true, the search will omit the wildcard '%' wrapper, making it so that at least one searched fields be an exact match.   sentence boolean Default false. If true, the search string will not be split up into individual tokens and the expression will be matched in its entirety.   Taxonomy Filters   cat array|integer The term\_id of the category to include. An array of IDs will also be accepted.   category\_name string The slug of a single category.   tag string The slug of a single tag   taxonomy associative array An associative array where the key is the name of the taxonomy and the value is an array of term IDs. Post that exist in any of the terms will be included in the results. Only public taxonomies will be recognized.   Pagination Filters   paged integer A positive integer specifiying the page (or subset of results) to return. This filter will automatically determine the offset to use based on the per\_page and paged. Using this filter will cause include\_found to be true.    per\_page integer The maximum number of posts to return. The value must range from 1 to MAX\_POSTS\_PER\_PAGE.   offset integer The number of posts to skip over before returning the result set.   Ordering Parameters   orderby array|string Sort the results by the given identifier. Defaults to 'date'. Supported values are: - 'none' - No ordering will be applied.
- 'ID' - The ID of the post.
- 'author' - The value of the author ID.
- 'title' - The title of the post.
- 'name' - The slug/name of the post.
- 'date' - (Default) Publish date of the post.
- 'modified' - Last modified date of the post.
- 'parent'- The ID of the post's parent
- 'rand' - A random order, Note: due to caching, the order may not change on every request.
- 'comment\_count' - The number of comments the post has.
- 'menu\_order' - The set menu order for the post.
- 'post\_\_in' - Preserves the order supplied in the post\_\_in filter. This is ignored unless the post\_\_in filter is supplied.

Orderby will also accept an array of multiple identifiers.

orderstringThe order direction. Options are 'ASC' and 'DESC'. Default is 'DESC'General Filtersauthor\_namestringThe user\_nicename of the author.authorintegerThe ID of the authors to include. An array of IDs will also be accepted. Negative ID's can be used to denote exclusion.post\_\_inarray|integerAn array of post ID's to include.pintegerA single post IDnamestringThe post\_name or slug of the postpagenamestringThe post\_name or slug of the post. Will cause the post\_type filter to default to 'page'attachmentstringThe post\_name or slug of the post. Will cause the post\_type filter to default to 'attachment'.attachment\_idintegerSynonym to 'p' filter.subpoststringSynonym for 'attachment' filter. subpost\_idintegerSynonym for 'attachment\_id' filter.post\_typearray|stringThe post types to be included in the result set.post\_statusarray|stringDefault to 'publish'. The post statii to include in the result set. Note that the statii passed in are run through capability checks for the current user.post\_parent\_\_inarray|integerArray or single Post ID to pull child posts from.Response Altering Parameters include\_foundbooleanDefaut to false. When true, the response will include a found rows count. There is some overhead in generating the total count so this should only be turned on when needed. This is automatically turned on if the 'paged' filter is used.callbackstringWhen set, the response will be wrapped in a JSONP callback.##### Response

[](#response)

```
{
	'found': 40, //only provided if include_found == true
	"posts": [
		[Post Object],
		….
	]
}

```

#### Single Entity

[](#single-entity)

##### Request

[](#request-1)

```
GET {api root}/posts/{id}

```

##### Parameters

[](#parameters-1)

   Parameter Data Type Description      Response Altering Parameters    callback string When set, the response will be wrapped in a JSONP callback.  ##### Post JSON Schema

[](#post-json-schema)

```
{
    "title": "Post Object",
    "description": "A representation of a single post object",
    "type": "object",
    "id": "#post",
    "properties": {
        "author": {
            "description": "The user set as the author of the post.",
            "type": {
                "$ref": "#user"
            },
            "required": true
        },
        "comment_count": {
            "description": "The number of comments for this post.",
            "type": "integer",
            "minimum": 0,
            "required": true
        },
        "comment_status": {
            "description": "The current status determining whether the post is accepting comments.",
            "enum": ["open", "closed"],
            "required": true
        },
        "content_display": {
            "description": "The content of the post after it has been run through the set 'the_content' filters.  Shortcodes are not expanded.",
            "type": "string",
            "required": true
        },
        "content": {
            "description": "The raw content of the post as it's stored in the database.",
            "type": "string",
            "required": true
        },
        "date": {
            "description": "The post's creation time in iso 8601 format.",
            "type": "string",
            "format": "date-time",
            "required": true
        },
        "excerpt_display": {
            "description": "The excerpt of the post after it has been run through the 'the_excerpt' filters.",
            "type": "string",
            "required": true
        },
        "excerpt": {
            "description": "The raw excerpt as it is stored in the database.",
            "type": "string",
            "required": true
        },
        "id_str": {
            "description": "The ID of the post represented as a string.",
            "type": "string",
            "required": true
        },
        "id": {
            "description": "The ID of the post",
            "type": "integer",
            "minimum": 1,
            "required": true
        },
        "type": {
            "description": "The post_type of the post",
            "type": "string",
            "required": true
        },
        "media": {
            "type": "array",
            "required": false,
            "items": {
                "type": {
                    "$ref": "#mediaItem"
                }
            }
        },
        "meta": {
            "description": "Additional data for the Post object.  Handling must be provided by other plugins to expand the provided meta beyond core properties.",
            "type": "object",
            "required": false,
            "default": {},
            "additionalProperties": {
                "featuredImage": {
                    "description": "The ID of the image being referenced as the featured image.  The referenced image should be present in the media property.",
                    "type": "integer",
                    "minimum": 1
                },
                "gallery": {
                	"description": "An array of objects that represent the galleries in the post content.",
                	"type": "array",
                	"required": false,
                	"items": {
                	 	"ids": {
                	 		"description": "The IDs of the attachments to be used in the gallery.",
                	 		"type": "array",
                	 		"required": false
                	 	},
                    	"orderby": {
                    		"description": "Specifies how to sort the display thumbnails.",
                    		"type": "array",
                    		"required": false
                    	},
                    	"order": {
                    		"description": "Specifies the sort order used to display thumbnails."
                    		"type": "string",
                    		"required": false
                    	},
                    	"in": {
                    		"description": "An array of IDs to only show the images from these attachments."
                    		"type": "array",
                    		"required": false
                    	},
                    	"exclude": {
                    		"description": "An array of IDs to not show the images from these attachments."
                    		"type": "array",
                    		"required": false
                    	},
                    	"id": {
                	 		"description": "The ID of the post to be used in the gallery. Used for specifying other posts.",
                	 		"type": "integer",
                	 		"required": false
                	 	}
                	}
                }
            }
        },
        "mime_type": {
            "description": "The mime type of the represented object",
            "type": "string",
            "required": true,
            "default": "text/html"
        },
        "modified": {
            "type": "string",
            "format": "date-time",
            "required": true
        },
        "name": {
            "description": "The name (slug) for the post, used in URLs.",
            "type": "string",
            "required": true
        },
        "parent_str": {
            "description": "The ID of the post's parent as a string, if it has one.",
            "type": "string",
            "required": false
        },
        "parent": {
            "description": "The ID of the post's parent as a string, if it has one.",
            "type": "integer",
            "required": false
        },
        "permalink": {
            "description": "The full permalink URL to the post.",
            "type": "string",
            "formate": "uri",
            "required": true
        },
        "status": {
            "description": "The status of the post.",
            "type": {
                "enum": ["publish", "draft", "pending", "future", "trash"]
            },
            "required": true
        },
        "taxonomies": {
            "description": "Key/Value pairs of taxonomies that exist for the given post where the Key is the name of the taxonomy.",
            "type": "object",
            "required": false,
            "default": {},
            "additionalProperties": {
                "category": {
                    "type": "array",
                    "items": {
                        "type": {
                            "$ref": "#term"
                        }
                    },
                    "required": false
                },
                "post_tag": {
                    "type": "array",
                    "items": {
                        "type": {
                            "$ref": "#term"
                        }
                    },
                    "required": false
                }
            }
        },
        "title": {
            "description": "The title of the Post.",
            "type": "string",
            "required": true
        }
    }
}

```

##### Example Post Response

[](#example-post-response)

```
{
	"id" : 1234567,
	"id_str" : "1234567",
	"type" : "post",
	"permalink": "http://example.com/posts/foobar/",
	"parent": 12345,
	"parent_str": "12345",
	"date": "2012-01-01T12:59:59+00:00",
	"modified": "2012-01-01T12:59:59+00:00",
	"status": "publish",
	"comment_status":"open",
	"comment_count": 99,
	"menu_order": 99,
	"title": "Lorem Ipsum Dolor!",
	"name": "loerm-ipsum-dolor"	,
	"excerpt": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sed lacus eros. Integer elementum urna.",
	"excerpt_display": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sed lacus eros. Integer elementum urna.",
	"content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nec consequatnibh. Quisque in consectetur ligula. Praesent pretium massa vitae neque adipiscing vita cursus nulla congue.\n\n Cras aliquet ipsum non nisi accumsan tempor sollicitudin lacus interdum Donec in enim ut ligula dignissim tempor. Vivamus semper cursus mi, at molestie erat lobortiut. Pellentesque non mi vitae augue egestas vulputate et eu massa. Integer et sem orci. Suspendisse at augue in ipsum convallis semper.\n\n[gallery ids=\"1,2,3,4\"]\n\nNullam vitae libero eros, a fringilla erat. Suspendisse potenti. In dictum bibendum liberoquis facilisis risus malesuada ac. Nulla ullamcorper est ac lectus feugiat scelerisque.  Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas",
	"content_display": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nec consequatnibh. Quisque in consectetur ligula. Praesent pretium massa vitae neque adipiscing vita cursus nulla congue.\n\nCras aliquet ipsum non nisi accumsan tempor sollicitudin lacus interdum Donec in enim ut ligula dignissim tempor. Vivamus semper cursus mi, at molestie erat lobortiut. Pellentesque non mi vitae augue egestas vulputate et eu massa. Integer et sem orci. Suspendisse at augue in ipsum convallis semper.\n\n\n\nNullam vitae libero eros, a fringilla erat. Suspendisse potenti. In dictum bibendum liberoquis facilisis risus malesuada ac. Nulla ullamcorper est ac lectus feugiat scelerisque.  Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas",
	"author": [User Object],
	"mime_type": "",
	"meta": {
		"featuredImage": 123456,
		"gallery" : [
			{
				"ids": [23],
				"orderby": [
					"menu_order",
					"ID"
				],
				"order": "ASC",
				….
			},
			….
		]
	},
	"taxonomies": {
		"category": [
			[Term Object],
			….
		],
		"post_tag": [
			[Term Object],
			….
		],
		….
	},
	"media": [
		{
			"type":
			"id": 123456,
			"id_str": ""123445",
			"altText": "Lorem ipsum doler set amut.",
			"mime_type": "image/jpg",
			"sizes": [
				{
					"name": "thumbnail",
					"width": 100,
					"height": 80,
					"url": "http://example.com/wp-content/uploads/2012/02/foobar-100x80.jpg"
				},
				….
			]
		},
		….
	]
}

```

\##Users A User represents a single author or user on the site.

### Methods

[](#methods-1)

#### List

[](#list-1)

##### Request

[](#request-2)

```
GET {api root}/users

```

##### Parameters

[](#parameters-2)

   Parameter Data Type Description     Pagination Filters   paged integer A positive integer specifiying the page (or subset of results) to return. This filter will automatically determine the offset to use based on the per\_page and paged. Using this filter will cause include\_found to be true.    per\_page integer The maximum number of posts to return. The value must range from 1 to MAX\_USERS\_PER\_PAGE.   offset integer The number of posts to skip over before returning the result set.   Ordering Parameters   orderby string Sort the results by the given identifier. Defaults to 'display\_name'. Supported values are: - 'display\_name' - Ordered by the display name of the user.
- 'nicename' - The slug/nicename of the user.
- 'post\_count' - The number of posts the user has.

    order string The order direction. Options are 'ASC' and 'DESC'. Default is 'DESC'   General Filters   in array|integer An array of user ID's to include.    Response Altering Parameters    include\_found boolean Defaut to false. When true, the response will include a found rows count. There is some overhead in generating the total count so this should only be turned on when needed. This is automatically turned on if the 'paged' filter is used.   who string Filters to users based on a subset of roles. Currently, only 'authors' is supported.   callback string When set, the response will be wrapped in a JSONP callback.  ##### Response

[](#response-1)

```
{
	'found': 40, //only provided if include_found == true
	"users": [
		[User Object],
		….
	]
}

```

#### Single Entity

[](#single-entity-1)

##### Request

[](#request-3)

```
GET {api root}/users/{id}

```

##### Parameters

[](#parameters-3)

   Parameter Data Type Description      Response Altering Parameters    callback string When set, the response will be wrapped in a JSONP callback.  ##### User JSON Schema

[](#user-json-schema)

```
{
    "description": "Representation of a single sytem user or author.",
    "id": "#user",
    "type": "object",
    "properties": {
        "id_str": {
            "description": "The ID of the User object as a string.",
            "type": "integer",
            "required": true
        },
        "id": {
            "description": "The ID of the User object.",
            "type": "integer",
            "required": true
        },
        "nicename": {
            "description": "The user's slug, or url safe name.",
            "type": "string",
            "required": false
        },
        "display_name": {
            "description": "The user's name as shown publicly.",
            "type": "string",
            "required": false
        },
        "posts_url": {
            "description": "The URL to the user's posts.",
            "type": "string",
            "format": "uri",
            "required": false
        },
        "user_url": {
            "description": "The User's personal URL.",
            "type": "string",
            "required": false
        },
        "avatar": {
            "description": "An array of images/sizes available for the User's avatar.",
            "type": "array",
            "items": {
                "description": "Image information for a User's Avatar.",
                "type": "object",
                "properties": {
                    "height": {
                        "description": "Height of the image in pixels.",
                        "type": "integer",
                        "required": true
                    },
                    "url": {
                        "description": "Full URL to the image resource.",
                        "type": "string",
                        "format": "uri",
                        "required": true
                    },
                    "width": {
                        "description": "Width of the image in pixels.",
                        "type": "integer",
                        "required": true
                    }
                }
            }
        },
        "meta": {
            "description": "Extended User data.",
            "type": "object"
        }
    }

}

```

##### Example User Response

[](#example-user-response)

```
{
	"id" : 1234567,
	"id_str" : "1234567",
	"nicename": "john-doe",
	"display_name":"John Doe",
	"posts_url": "http://example.com/author/john-doe/",
	"user_url": "http://vocecomm.com",
	"avatar": [
		{
			"url":"http://1.gravatar.com/avatar/7a10459e7210f3bbaf2a75351255d9a3?s=64",
			"width":64,
			"height":64
		},
		….
	],
	"meta":{
		"nickname": "Johnny",
		"first_name": "John",
		"last_name": "Doe",
		"description": "Lorem ipsum dolar set amet."
	}
}

```

\##Taxonomies Taxonomies represent the different types of classifications of content. Only public taxonomies can be returned via the API.

### Methods

[](#methods-2)

#### List

[](#list-2)

##### Request

[](#request-4)

```
GET {api root}/taxonomies

```

##### Parameters

[](#parameters-4)

   Parameter Data Type Description     in array|string An array of taxonomy names to include.   post\_type array|string An array of post\_types to include taxonomies from. Results will include any taxonomies with at least 1 of the given post\_types included.   callback string When set, the response will be wrapped in a JSONP callback.   callback string When set, the response will be wrapped in a JSONP callback.  ##### Response

[](#response-2)

```
{
	"taxonomies": [
		[Taxonomy Object]
		….
	]
}

```

#### Single Entity

[](#single-entity-2)

##### Request

[](#request-5)

```
GET {api root}/taxonomies/{name}

```

##### Parameters

[](#parameters-5)

   Parameter Data Type Description      Response Altering Parameters    callback string When set, the response will be wrapped in a JSONP callback.  ##### Taxonomy JSON Schema

[](#taxonomy-json-schema)

```
{
    "id": "#taxonomy",
    "descrption": "A representation of a taxonomy.",
    "type": "object",
    "properties": {
        "name": {
            "description": "The name/unique identifier for the taxonomy.",
            "type": "string",
            "required": true
        },
        "post_type": {
            "description": "An array of post types the taxony is tied to.",
            "type": "array",
            "items": {
                "description": "The post_type string.",
                "type": "string"
            }
        },
        "hierarchical": {
            "description": "Indicates whether the taxonomy is hierarchical or allows parent/child relationships.",
            "type": "boolean",
            "default": false
        },
        "query_var": {
            "description": "The query_var tied to this taxonomy.  Useful when processing rewrite rules to determine the proper API query.",
            "type": "string",
            "required": false
        },
        "labels": {
            "description": "The user displayed name representing the taxonomy.",
            "type": "object",
            "properties": {
                "name": {
                    "description": "The plural name of the taxonomy.",
                    "type": "string"
                },
                "singularName": {
                    "description": "The singular name of the taxonomy.",
                    "type": "string"
                }
            }
        },
        "meta": {
            "description": "Extended Taxonomy data.",
            "type": "object"
        }
    }
}

```

##### Example Taxonomy Response

[](#example-taxonomy-response)

```
{
	"name": "category",
	"post_types": [
		"post",
		"attachment",
		….
	],
	"hierarchical": true,
	"queryVar":"category",
	"labels": {
		"name": "Categories",
		"singularName": "Category"
	},
	"meta":{
	}
}

```

\##Terms Terms are individual classifications within a taxonomy.

### Methods

[](#methods-3)

#### List

[](#list-3)

##### Request

[](#request-6)

```
GET {api root}/taxonomies/{name}/terms

```

##### Parameters

[](#parameters-6)

   Parameter Data Type Description     Pagination Filters   paged integer A positive integer specifiying the page (or subset of results) to return. This filter will automatically determine the offset to use based on the per\_page and paged. Using this filter will cause include\_found to be true.    per\_page integer The maximum number of posts to return. The value must range from 1 to MAX\_TERMS\_PER\_PAGE.   offset integer The number of posts to skip over before returning the result set.   Ordering Parameters   orderby string Sort the results by the given identifier. Defaults to 'name'. Supported values are: - 'name' - The user readable name of the term.
- 'slug' - The slug of the term.
- 'count' - The number of posts the term is connected to.

    order string The order direction. Options are 'ASC' and 'DESC'. Default is 'DESC'   General Filters   in array|integer An array of term ID's to include.   slug string A term slug to include.   parent id Include the children of the provided term ID.   hide\_empty boolean If true, only terms with attached posts will be returned. Default is true.   pad\_counts boolean If true, count all of the children along with the term. Default is false.    Response Altering Parameters    include\_found boolean Defaut to false. When true, the response will include a found rows count. There is some overhead in generating the total count so this should only be turned on when needed. This is automatically turned on if the 'paged' filter is used.   callback string When set, the response will be wrapped in a JSONP callback.  ##### Response

[](#response-3)

```
{
	"found": 25,  //only provided if include_found == true
	"terms": [
		[Term Object]
		….
	]
}

```

#### Single Entity

[](#single-entity-3)

##### Request

[](#request-7)

```
GET {api root}/taxonomies/{name}/terms/{term_id}

```

##### Parameters

[](#parameters-7)

   Parameter Data Type Description      Response Altering Parameters    callback string When set, the response will be wrapped in a JSONP callback.  #### Term JSON Schema

[](#term-json-schema)

```
{
    "type": "object",
    "required": false,
    "properties": {
        "description": {
            "description": "A long text describing the term.",
            "type": "string",
            "required": false
        },
        "meta": {
            "description": "Extended Term data.",
            "type": "object",
        },
        "name": {
            "description": "The title/name of the term as displayed to users.",
            "type": "string",
            "required": false
        },
        "parent_str": {
            "description": "The ID of the parent term as a string, if exists.",
            "type": "string",
            "required": false
        },
        "parent": {
            "description": "The ID of the parent term, if exists.",
            "type": "number",
            "required": false
        },
        "post_count": {
            "description": "The distinct count of posts attached to this term.  If 'pad_count' is set to true, this will also include all posts attached to child terms.  This only includes posts of type 'post'.",
            "type": "number",
            "required": false
        },
        "slug": {
            "description": "The name (slug) of the term as used in URLs.",
            "type": "string",
            "required": false
        },
        "taxonomy": {
            "type": "string",
            "required": false
        },
        "id_str": {
            "description": "The ID of the term as a string.",
            "type": "string",
            "id": "http://jsonschema.net/term_id_str",
            "required": false
        },
        "id": {
            "description": "The ID of the term.",
            "type": "number",
            "id": "http://jsonschema.net/term_id",
            "required": false
        },
        "term_taxonomy_id_str": {
            "description": "The ID that uniquely represents this term/taxonomy as ing asterms are shared across multiple taxonomies.",
            "type": "string",
            "id": "http://jsonschema.net/term_taxonomy_id_str",
            "required": false
        },
        "term_taxonomy_id": {
            "description": "The ID that uniquely represents this term/taxonomy as terms are shared across multiple taxonomies.",
            "type": "number",
            "id": "http://jsonschema.net/term_taxonomy_id",
            "required": false
        }
    }
}

```

##### Example Term Response

[](#example-term-response)

```
{
	"id": 123456,
	"term_id_str": "123456",
	"term_taxonomy_id": 123456789,
	"term_taxonomy_id_str": "123456789",
	"parent": 1234567,
	"parent_str": "1234567",
	"name": "Local News",
	"slug": "local-news",
	"taxonomy": "category",
	"description": "News reports from around Polk County",
	"post_count": 25,
	"meta":{
	}
}

```

\##Rewrite Rules Rewrite Rules can be used to convert internal links in content into API requests.

### Methods

[](#methods-4)

#### List

[](#list-4)

##### Request

[](#request-8)

```
GET {api root}/rewrite_rules

```

#### Rewrite Rules JSON Schema

[](#rewrite-rules-json-schema)

```
{
    "id": "#rewrite_rules",
    "description": "Rewrite Rules represent the URL structure on the hosting API site.  Providing these to the client, allows the client to override internal links with sequential API requests.",
    "type": "object",
    "properties": {
        "base_url": {
            "description": "The root URL which all rewrite rules are based.",
            "type": "string",
            "format": "uri",
            "required": true
        },
        "rewrite_rules": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "query_expression": {
                        "description": "The format string used to build the resulting query parameters for the rewrite rules from the components matched from the regex.",
                        "type": "string",
                        "required": true
                    },
                    "regex": {
                        "description": "The regular expression used to break down the requested URL into components.",
                        "type": "string",
                        "format": "regex",
                        "required": true
                    }
                }
            }

        }
    }
}

```

##### Example Rewrite Rules Response

[](#example-rewrite-rules-response)

```
{
	"base_url": "http://example.com/",
	"rewrite_rules": [
		{
			"regex": "category/(.+?)/?$",
			"query_expression": "category_name=$1"
		}
		….
	]
}

```

Media Items
-----------

[](#media-items)

Below are the schemas for media items.

### Base Media Items JSON Schema

[](#base-media-items-json-schema)

```
{
    "description": "Base media object",
    "id": "mediaItem",
    "type": "object",
    "properties": {
        "type": {
            "description": "The subclass of media object being represented.",
            "type": "string",
            "required": true
        }
    }

}

```

### Internal Media Item Base JSON Schema

[](#internal-media-item-base-json-schema)

```
{
    "description": "An internal media item hosted by this WP instance that is backed by a Post Object",
    "type": "object",
    "id": "#internalMediaItem",
    "extends": {
        "$ref": "#mediaItem"
    },
    "properties": {
        "idStr": {
            "description": "The ID of the Post object representing this media attachment as a string.",
            "type": "integer",
            "required": true
        },
        "id": {
            "description": "The ID of the Post object representing this media attachment.",
            "type": "integer",
            "required": true
        },
        "mimeType": {
            "description": "The mime type of the attched media object",
            "type": "string",
            "required": true
        },
    }
}

```

### Internal Image Media Item JSON Schema

[](#internal-image-media-item-json-schema)

```
{
    "description": "An internal image item hosted by this WP instance",
    "type": "object",
    "id": "#internalMediaItem",
    "extends": {
        "$ref": "#mediaItem"
    },
    "properties": {
        "altText": {
            "description": "The alternate text for the image.  Maps to post_meta key '_wp_attachment_image_alt'.",
            "type": "string",
            "required": false
        },
        "sizes": {
            "description": "Listing of available sizes of the image allowing the proper size to be used for the client device.",
            "type": "array",
            "required": true,
            "items": {
                "type": "object",
                "required": true,
                "properties": {
                    "height": {
                        "description": "Height of the image in pixels.",
                        "type": "integer",
                        "required": true
                    },
                    "name": {
                        "description": "The identifier for the size that generated this size of the image.",
                        "type": "string",
                        "required": true
                    },
                    "url": {
                        "description": "Full URL to the image resource.",
                        "type": "string",
                        "format": "uri",
                        "required": true
                    },
                    "width": {
                        "description": "Width of the image in pixels.",
                        "type": "integer",
                        "required": true
                    }
                }
            }

        }
    }
}

```

Comments
--------

[](#comments)

A comment represents a user response to a post

### Methods

[](#methods-5)

#### List

[](#list-5)

##### Request

[](#request-9)

```
GET {api root}/comments

GET {api root}/posts/{#post_id}/comments

```

##### Parameters

[](#parameters-8)

   Parameter Data Type Description      Date Filters    before  string A parsable formatted date string. Unless specified in the format used, the result will be relative to the timezone of the site.   after  string A parsable formatted date string. Unless specified in the format used, the result will be relative to the timezone of the site.   Search Filtering   s string  Search keyword or string, by default this searches against the author, author email, author url, author ip, and content. The search looks for a match to the entire search expression.    Pagination Filters   paged integer A positive integer specifiying the page (or subset of results) to return. This filter will automatically determine the offset to use based on the per\_page and paged arguments. Using this filter will cause include\_found to be true.    per\_page integer The maximum number of posts to return. The value must range from 1 to MAX\_COMMENTS\_PER\_PAGE.   offset integer The number of posts to skip over before returning the result set.   Ordering Parameters   orderby array|string Sort the results by the given identifier. Defaults to 'date'. Supported values are: - 'comment\_date\_gmt' - (Default) The GMT date of the post.
- 'comment\_ID' - The ID of the post.
- 'comment\_author' - The value of the author ID.
- 'comment\_date' - The date of the comment..
- 'comment\_type' - The type of comment.
- 'comment parent'- The ID of the comment's parent
- 'comment\_post\_ID' - The ID of the post which the comment belongs.
- 'user\_id' - The ID of the user making the comments.

Orderby will also accept an array of multiple identifiers.

orderstringThe order direction. Options are 'ASC' and 'DESC'. Default is 'DESC'General Filtersininteger|arrayArray of Ids of comments to include.parentintegerID of the parent comment to pull from.post\_idintegerID of post from which to pull comments.post\_namestringSlug/Name of the post from which to pull comments.typestringThe type of comments to return. Default options: 'comment', 'pingback', 'trackback', 'pings' (returns trackbacks and pingbacks').statusstringThe status of comments to return. Default: 'approved'.user\_idintUser ID of commentor making the comments.Response Altering Parameters include\_foundbooleanDefaut to false. When true, the response will include a found rows count. There is some overhead in generating the total count so this should only be turned on when needed. This is automatically turned on if the 'paged' filter is used.callbackstringWhen set, the response will be wrapped in a JSONP callback.##### Response

[](#response-4)

```
{
	'found': 40, //only provided if include_found == true
	"comments": [
		[Comment Object],
		….
	]
}

```

#### Single Entity

[](#single-entity-4)

##### Request

[](#request-10)

```
GET {api root}/comments/{id}

```

##### Parameters

[](#parameters-9)

   Parameter Data Type Description      Response Altering Parameters    callback string When set, the response will be wrapped in a JSONP callback.  ##### Comment JSON Schema

[](#comment-json-schema)

```
{
    "title": "Comment Object",
    "description": "A representation of a single post object",
    "type": "object",
    "id": "#comment",
    "properties": {
        "author": {
            "description": "Display name of the author of the comment.",
            "type": "string",
            "required": true
        }
        "author_url": {
            "description": "URL set for the author of the comment.",
            "type": "string",
            "required": false
        }
        "date": {
            "description": "The comment's creation time in iso 8601 format.",
            "type": "string",
            "format": "date-time",
            "required": true
        },
        "content": {
            "description": "The raw comment content.",
            "type": "string",
            "required": true
        },
        "content_display": {
            "description": "Display formatted content of the comment.",
            "type": "string",
            "required": true
        },
        "user": {
            "description": "ID of the user making the comment",
            "type": "integer",
            "required": false
        },
					"user_id_str": {
            "description": "String version of the ID of the user making the comment",
            "type": "string",
            "required": false
        },
        "id_str": {
            "description": "The ID of the post represented as a string.",
            "type": "string",
            "required": true
        },
        "id": {
            "description": "The ID of the post",
            "type": "integer",
            "minimum": 1,
            "required": true
        },
        "type": {
            "description": "The type of comment.  Deafult enum: 'comment', 'pingback', 'trackback'",
            "type": "string",
            "required": true
        },
        "media": {
            "type": "array",
            "required": false,
            "items": {
                "type": {
                    "$ref": "#mediaItem"
                }
            }
        },
        "parent_str": {
            "description": "The ID of the comment's parent as a string, if it has one.",
            "type": "string",
            "required": false
        },
        "parent": {
            "description": "The ID of the comment's parent as a string, if it has one.",
            "type": "integer",
            "required": false
        },
        "status": {
            "description": "The status of the comment.",
            "type": {
                "enum": ["approve", "pending", "spam", "trash"]
            },
            "required": true
        }
    }
}

```

##### Example Comment Response

[](#example-comment-response)

```
{
    "id": 597,
    "id_str": "597",
    "type": "comment",
    "author": "John Doe",
    "author_url": "http://example.org",
    "parent": 0,
    "parent_str": "0",
    "date": "2013-06-11T18:39:46+00:00",
    "content": "This is my comment text",
    "status": "approve",
    "user": 1,
    "user_id_str": "1",
    "content_display": "This is my comment text\n",
    "avatar": [
        {
            "url": "http:\/\/1.gravatar.com\/avatar\/96614ec98aa0c0d2ee75796dced6df54?s=96&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=G",
            "width": 96,
            "height": 96
        }
    ]
}

```

###  Health Score

32

—

LowBetter than 69% of packages

Maintenance18

Infrequent updates — may be unmaintained

Popularity27

Limited adoption so far

Community22

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~51 days

Total

8

Last Release

4192d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/3452?v=4)[Voce Platforms](/maintainers/voceconnect)[@voceconnect](https://github.com/voceconnect)

---

Top Contributors

[![jeffstieler](https://avatars.githubusercontent.com/u/63922?v=4)](https://github.com/jeffstieler "jeffstieler (66 commits)")[![banderon](https://avatars.githubusercontent.com/u/533529?v=4)](https://github.com/banderon "banderon (60 commits)")[![johnciacia](https://avatars.githubusercontent.com/u/195966?v=4)](https://github.com/johnciacia "johnciacia (38 commits)")[![kevinlangleyjr](https://avatars.githubusercontent.com/u/877634?v=4)](https://github.com/kevinlangleyjr "kevinlangleyjr (9 commits)")[![chrisscott](https://avatars.githubusercontent.com/u/41005?v=4)](https://github.com/chrisscott "chrisscott (4 commits)")[![alexsancho](https://avatars.githubusercontent.com/u/39951?v=4)](https://github.com/alexsancho "alexsancho (2 commits)")[![brock](https://avatars.githubusercontent.com/u/654725?v=4)](https://github.com/brock "brock (1 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/voceconnect-thermal-api/health.svg)

```
[![Health](https://phpackages.com/badges/voceconnect-thermal-api/health.svg)](https://phpackages.com/packages/voceconnect-thermal-api)
```

###  Alternatives

[showdoc/showdoc

ShowDoc is a tool greatly applicable for an IT team to share documents online

12.8k7.1k](/packages/showdoc-showdoc)[oat-sa/tao-core

TAO core extension

66143.7k122](/packages/oat-sa-tao-core)[phlak/directory-lister

PHP directory lister

2.5k1.4k](/packages/phlak-directory-lister)[brandembassy/slim-nette-extension

19201.2k](/packages/brandembassy-slim-nette-extension)[b13/slimphp-bridge

Provides a middleware for registering Slim PHP applications within TYPO3 Frontend Sites

2049.5k1](/packages/b13-slimphp-bridge)[egroupware/openid

EGroupware OpenID Connect / OAuth2 server

1228.1k4](/packages/egroupware-openid)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
