Version 3 of the Zotero Web API introduces a new all-JSON response format and various other changes. While API v3 is mostly backwards compatible, existing clients may need to make a few small adjustments for full compatibility, depending on usage.
format=jsonkey and version properties and top-level library, links, and meta objects.meta contains non-editable system-generated properties like createdByUser/ lastModifiedByUser (for group items), creatorSummary, and numChildren.title, author, published, updated) have been removed.application/atom+xml in the Accept header will continue to receive Atom responses if no other format is requestedformat=json, include=data has replaced Atom's content=json and is now the default mode, with a top-level data object containing the editable fields. As with content, additional comma-separated types can be requested (e.g., include=data,bib). The requested types are provided as top-level properties. content=html remains the default in Atom.items/collections/searches property containing an array.data) or the full parent JSON object, with the server extracting the data object automatically. The latter allows for some editing tasks to be performed without any programming.parsedDate property in the format=json meta object gives the full parsed date in YYYY-MM-DD form, so that clients don't need to replicate Zotero's date-parsing logic to get exact dates. In v3 Atom, zapi:parsedDate replaces zapi:year.zapi:numTags is removed in v3 Atom, since it's unnecessary with the tags array in the editable json.limit isn't provided.Total-Results. zapi:totalResults is removed in v3 Atom.rel=first/prev/next/last/alternate links for multi-object responses are now provided in the Link HTTP header.Authorization request header instead of the key query parameter. Since API keys have never been included in the URLs provided in responses, previously all provided URLs had to be modified for key-based access.v=3) instead of the Zotero-API-Version header for easier debugging and sharing of requests, though both will remain supported. dateModified descending is the default sort instead of dateAdded descending. itemKey/itemVersion (and similar properties on collections and searches) in the editable JSON are now just key and version for easier handling by clients. Clients that simply pass back the edited JSON without touching those properties shouldn't be affected. Clients that store the JSON will need to modify it before sending in v3.version metadata field in the computerProgram item type is now versionNumber to avoid a conflict with the renamed object version property.published/updated elements, though in v2 they can be sent back in the JSON as dateAdded/dateModified in YYYY-MM-DD hh-mm-dd format, interpreted as UTC. In v3 write requests, either is accepted, though the previous form is deprecated.accessDate field, which was also previously YYYY-MM-DD[ hh-mm-dd], is ISO 8601 in v3 (including in Atom) for both reading and writing. The previous form is accepted but deprecated.rel=self/first/prev/next/last) on multi-object responses can be used without modification by clients using the Authorization header. The rel=self links in individual objects are meant as base URIs and do not include any query parameters (e.g., include=data,bib). This is a change from the previous behavior, where the Atom entry rel=“self” links include all non-default provided parameters. But with the Authorization header and include=data as the new default, the base URI may be sufficient for most individual-object requests.newer parameter is now since for clarity. newer is deprecated.order parameter is now sort and sort is now direction. order=<field> and sort=<asc/desc> are deprecated.format=versions instead of format=etags. format=etags is deprecated.pprint=1 has been removed, and all responses are now pretty-printed. format=atom explicitly, or send application/atom+xml in the Accept headerzapi:parsedDate instead of zapi:yearTotal-Results HTTP header instead of zapi:totalResultstags array in editable JSON instead of using zapi:numTagskey/version instead of itemKey/itemVersion (and collection*/search*) in editable JSONversionNumber instead of version metadata field in computerProgram item typeaccessDate, dateAdded, and dateModifiedsince parameter instead of newersort parameter instead of order and direction instead of sortitems/collections/searches arrayAuthorization: Bearer <apiKey> instead of key parameterv parameter instead of Zotero-API-Version for debugging