--- /dev/null
+.. highlight:: c
+
+.. _picklebuffer-objects:
+
+.. index::
+ pair: object; PickleBuffer
+
+Pickle buffer objects
+---------------------
+
+.. versionadded:: 3.8
+
+A :class:`pickle.PickleBuffer` object wraps a :ref:`buffer-providing object
+<bufferobjects>` for out-of-band data transfer with the :mod:`pickle` module.
+
+
+.. c:var:: PyTypeObject PyPickleBuffer_Type
+
+ This instance of :c:type:`PyTypeObject` represents the Python pickle buffer type.
+ This is the same object as :class:`pickle.PickleBuffer` in the Python layer.
+
+
+.. c:function:: int PyPickleBuffer_Check(PyObject *op)
+
+ Return true if *op* is a pickle buffer instance.
+ This function always succeeds.
+
+
+.. c:function:: PyObject *PyPickleBuffer_FromObject(PyObject *obj)
+
+ Create a pickle buffer from the object *obj*.
+
+ This function will fail if *obj* doesn't support the :ref:`buffer protocol <bufferobjects>`.
+
+ On success, return a new pickle buffer instance.
+ On failure, set an exception and return ``NULL``.
+
+ Analogous to calling :class:`pickle.PickleBuffer` with *obj* in Python.
+
+
+.. c:function:: const Py_buffer *PyPickleBuffer_GetBuffer(PyObject *picklebuf)
+
+ Get a pointer to the underlying :c:type:`Py_buffer` that the pickle buffer wraps.
+
+ The returned pointer is valid as long as *picklebuf* is alive and has not been
+ released. The caller must not modify or free the returned :c:type:`Py_buffer`.
+ If the pickle buffer has been released, raise :exc:`ValueError`.
+
+ On success, return a pointer to the buffer view.
+ On failure, set an exception and return ``NULL``.
+
+
+.. c:function:: int PyPickleBuffer_Release(PyObject *picklebuf)
+
+ Release the underlying buffer held by the pickle buffer.
+
+ Return ``0`` on success. On failure, set an exception and return ``-1``.
+
+ Analogous to calling :meth:`pickle.PickleBuffer.release` in Python.