Customer accounts & Memberships (#2024)

This commit is contained in:
Raphael Michel
2021-05-04 16:56:06 +02:00
committed by GitHub
parent 62e412bbc0
commit 8e79eb570e
116 changed files with 7975 additions and 279 deletions
+238
View File
@@ -0,0 +1,238 @@
.. _`rest-customers`:
Customers
=========
Resource description
--------------------
The customer resource contains the following public fields:
.. rst-class:: rest-resource-table
===================================== ========================== =======================================================
Field Type Description
===================================== ========================== =======================================================
identifier string Internal ID of the customer
email string Customer email address
name string Name of this customer (or ``null``)
name_parts object of strings Decomposition of name (i.e. given name, family name)
is_active boolean Whether this account is active
is_verified boolean Whether the email address of this account has been
verified
last_login datetime Date and time of last login
date_joined datetime Date and time of registration
locale string Preferred language of the customer
last_modified datetime Date and time of modification of the record
===================================== ========================== =======================================================
.. versionadded:: 4.0
Endpoints
---------
.. http:get:: /api/v1/organizers/(organizer)/customers/
Returns a list of all customers registered with a given organizer.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/customers/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"identifier": "8WSAJCJ",
"email": "customer@example.org",
"name": "John Doe",
"name_parts": {
"_scheme": "full",
"full_name": "John Doe"
},
"is_active": true,
"is_verified": false,
"last_login": null,
"date_joined": "2021-04-06T13:44:22.809216Z",
"locale": "de",
"last_modified": "2021-04-06T13:44:22.809377Z"
}
]
}
:query integer page: The page number in case of a multi-page result set, default is 1
:query string email: Only fetch customers with this email address
:param organizer: The ``slug`` field of the organizer to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to view this resource.
.. http:get:: /api/v1/organizers/(organizer)/customers/(identifier)/
Returns information on one customer, identified by its identifier.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/customers/8WSAJCJ/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"identifier": "8WSAJCJ",
"email": "customer@example.org",
"name": "John Doe",
"name_parts": {
"_scheme": "full",
"full_name": "John Doe"
},
"is_active": true,
"is_verified": false,
"last_login": null,
"date_joined": "2021-04-06T13:44:22.809216Z",
"locale": "de",
"last_modified": "2021-04-06T13:44:22.809377Z"
}
:param organizer: The ``slug`` field of the organizer to fetch
:param identifier: The ``identifier`` field of the customer to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to view this resource.
.. http:post:: /api/v1/organizers/(organizer)/customers/
Creates a new customer
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/customers/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
{
"email": "test@example.org"
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 201 Created
Vary: Accept
Content-Type: application/json
{
"identifier": "8WSAJCJ",
"email": "test@example.org",
...
}
:param organizer: The ``slug`` field of the organizer to create a customer for
:statuscode 201: no error
:statuscode 400: The customer could not be created due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to create this resource.
.. http:patch:: /api/v1/organizers/(organizer)/customers/(identifier)/
Update a customer. You can also use ``PUT`` instead of ``PATCH``. With ``PUT``, you have to provide all fields of
the resource, other fields will be reset to default. With ``PATCH``, you only need to provide the fields that you
want to change.
You can change all fields of the resource except the ``identifier``, ``last_login``, ``date_joined``, ``name``,
and ``last_modified`` fields.
**Example request**:
.. sourcecode:: http
PATCH /api/v1/organizers/bigevents/customers/8WSAJCJ/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
Content-Length: 94
{
"email": "test@example.org"
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"identifier": "8WSAJCJ",
"email": "test@example.org",
}
:param organizer: The ``slug`` field of the organizer to modify
:param identifier: The ``identifier`` field of the customer to modify
:statuscode 200: no error
:statuscode 400: The customer could not be modified due to invalid submitted data
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to change this resource.
.. http:post:: /api/v1/organizers/(organizer)/customers/(identifier)/anonymize/
Anonymize a customer. Deletes personal data and disconnects from existing orders.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/customers/8WSAJCJ/anonymize/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"identifier": "8WSAJCJ",
"email": null,
}
:param organizer: The ``slug`` field of the organizer to modify
:param identifier: The ``identifier`` field of the customer to modify
:statuscode 200: no error
:statuscode 400: The customer could not be modified due to invalid submitted data
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to change this resource.
+3
View File
@@ -21,6 +21,9 @@ Resources and endpoints
vouchers
checkinlists
waitinglist
customers
membershiptypes
memberships
giftcards
carts
teams
+40
View File
@@ -69,6 +69,16 @@ require_approval boolean If ``true``, or
approved by the event organizer before they can be
paid.
require_bundling boolean If ``true``, this item is only available as part of bundles.
require_membership boolean If ``true``, booking this item requires an active membership.
require_membership_types list of integers Internal IDs of membership types valid if ``require_membership`` is ``true``
grant_membership_type integer If set to the internal ID of a membership type, purchasing this item will
create a membership of the given type.
grant_membership_duration_like_event boolean If ``true``, the membership created through ``grant_membership_type`` will derive
its term from ``date_from`` to ``date_to`` of the purchased (sub)event.
grant_membership_duration_days integer If ``grant_membership_duration_like_event`` is ``false``, this sets the number of
days for the membership.
grant_membership_duration_months integer If ``grant_membership_duration_like_event`` is ``false``, this sets the number of
calendar months for the membership.
generate_tickets boolean If ``false``, tickets are never generated for this
product, regardless of other settings. If ``true``,
tickets are generated even if this is a
@@ -198,6 +208,12 @@ Endpoints
"show_quota_left": null,
"require_approval": false,
"require_bundling": false,
"require_membership": false,
"require_membership_types": [],
"grant_membership_type": null,
"grant_membership_duration_like_event": true,
"grant_membership_duration_days": 0,
"grant_membership_duration_months": 0,
"variations": [
{
"value": {"en": "Student"},
@@ -294,6 +310,12 @@ Endpoints
"has_variations": false,
"require_approval": false,
"require_bundling": false,
"require_membership": false,
"require_membership_types": [],
"grant_membership_type": null,
"grant_membership_duration_like_event": true,
"grant_membership_duration_days": 0,
"grant_membership_duration_months": 0,
"variations": [
{
"value": {"en": "Student"},
@@ -370,6 +392,12 @@ Endpoints
"checkin_attention": false,
"require_approval": false,
"require_bundling": false,
"require_membership": false,
"require_membership_types": [],
"grant_membership_type": null,
"grant_membership_duration_like_event": true,
"grant_membership_duration_days": 0,
"grant_membership_duration_months": 0,
"variations": [
{
"value": {"en": "Student"},
@@ -435,6 +463,12 @@ Endpoints
"has_variations": true,
"require_approval": false,
"require_bundling": false,
"require_membership": false,
"require_membership_types": [],
"grant_membership_type": null,
"grant_membership_duration_like_event": true,
"grant_membership_duration_days": 0,
"grant_membership_duration_months": 0,
"variations": [
{
"value": {"en": "Student"},
@@ -531,6 +565,12 @@ Endpoints
"has_variations": true,
"require_approval": false,
"require_bundling": false,
"require_membership": false,
"require_membership_types": [],
"grant_membership_type": null,
"grant_membership_duration_like_event": true,
"grant_membership_duration_days": 0,
"grant_membership_duration_months": 0,
"variations": [
{
"value": {"en": "Student"},
+210
View File
@@ -0,0 +1,210 @@
Memberships
===========
Resource description
--------------------
The membership resource contains the following public fields:
.. rst-class:: rest-resource-table
===================================== ========================== =======================================================
Field Type Description
===================================== ========================== =======================================================
id integer Internal ID of the membership
customer string Identifier of the customer associated with this membership (can't be changed)
membership_type integer Internal ID of the membership type
date_start datetime Start of validity
date_end datetime End of validity
attendee_name_parts object JSON representation of components of an attendee name (configuration dependent)
===================================== ========================== =======================================================
Endpoints
---------
.. http:get:: /api/v1/organizers/(organizer)/memberships/
Returns a list of all memberships within a given organizer.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/memberships/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": 2,
"customer": "EGR9SYT",
"membership_type": 1,
"date_start": "2021-04-19T00:00:00+02:00",
"date_end": "2021-04-20T00:00:00+02:00",
"attendee_name_parts": {
"_scheme": "title_given_family",
"family_name": "Doe",
"given_name": "John",
"title": ""
}
}
]
}
:query integer page: The page number in case of a multi-page result set, default is 1
:query string customer: A customer identifier to filter for
:query integer membership_type: A membership type ID to filter for
:param organizer: The ``slug`` field of the organizer to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to view this resource.
.. http:get:: /api/v1/organizers/(organizer)/memberships/(id)/
Returns information on one membership, identified by its ID.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/memberships/2/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"id": 2,
"customer": "EGR9SYT",
"membership_type": 1,
"date_start": "2021-04-19T00:00:00+02:00",
"date_end": "2021-04-20T00:00:00+02:00",
"attendee_name_parts": {
"_scheme": "title_given_family",
"family_name": "Doe",
"given_name": "John",
"title": ""
}
}
:param organizer: The ``slug`` field of the organizer to fetch
:param id: The ``id`` field of the membership to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to view this resource.
.. http:post:: /api/v1/organizers/(organizer)/memberships/
Creates a new membership
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/memberships/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
{
"membership_type": 2,
"customer": "EGR9SYT",
"date_start": "2021-04-19T00:00:00+02:00",
"date_end": "2021-04-20T00:00:00+02:00",
"attendee_name_parts": {
"_scheme": "title_given_family",
"family_name": "Doe",
"given_name": "John",
"title": ""
}
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 201 Created
Vary: Accept
Content-Type: application/json
{
"id": 3,
"membership_type": 2,
"customer": "EGR9SYT",
"date_start": "2021-04-19T00:00:00+02:00",
"date_end": "2021-04-20T00:00:00+02:00",
"attendee_name_parts": {
"_scheme": "title_given_family",
"family_name": "Doe",
"given_name": "John",
"title": ""
}
}
:param organizer: The ``slug`` field of the organizer to create a membership for
:statuscode 201: no error
:statuscode 400: The membership could not be created due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to create this resource.
.. http:patch:: /api/v1/organizers/(organizer)/memberships/(id)/
Update a membership. You can also use ``PUT`` instead of ``PATCH``. With ``PUT``, you have to provide all fields of
the resource, other fields will be reset to default. With ``PATCH``, you only need to provide the fields that you
want to change.
You can change all fields of the resource except the ``id`` and ``customer`` fields.
**Example request**:
.. sourcecode:: http
PATCH /api/v1/organizers/bigevents/memberships/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
Content-Length: 94
{
"membership_type": 3
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"id": 1,
"membership_type": 3,
}
:param organizer: The ``slug`` field of the organizer to modify
:param id: The ``id`` field of the membership to modify
:statuscode 200: no error
:statuscode 400: The membership could not be modified due to invalid submitted data
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to change this resource.
+227
View File
@@ -0,0 +1,227 @@
Membership types
================
Resource description
--------------------
The membership type resource contains the following public fields:
.. rst-class:: rest-resource-table
===================================== ========================== =======================================================
Field Type Description
===================================== ========================== =======================================================
id integer Internal ID of the membership type
name multi-lingual string Human-readable name of the type
transferable boolean Whether a membership of this type can be used by
multiple persons
allow_parallel_usage boolean Whether a membership of this type can be used for
multiple parallel tickets
max_usages integer Maximum number of times a membership of this type can be
used.
===================================== ========================== =======================================================
Endpoints
---------
.. http:get:: /api/v1/organizers/(organizer)/membershiptypes/
Returns a list of all membership types within a given organizer.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/membershiptypes/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": 2,
"name": {
"de": "Wochenkarte",
"en": "Week pass"
},
"transferable": false,
"allow_parallel_usage": false,
"max_usages": 7
}
]
}
:query integer page: The page number in case of a multi-page result set, default is 1
:param organizer: The ``slug`` field of the organizer to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to view this resource.
.. http:get:: /api/v1/organizers/(organizer)/membershiptypes/(id)/
Returns information on one membership type, identified by its ID.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/membershiptypes/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"id": 1,
"name": {
"de": "Wochenkarte",
"en": "Week pass"
},
"transferable": false,
"allow_parallel_usage": false,
"max_usages": 7
}
:param organizer: The ``slug`` field of the organizer to fetch
:param id: The ``id`` field of the membership type to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to view this resource.
.. http:post:: /api/v1/organizers/(organizer)/membershiptypes/
Creates a new membership type
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/membershiptypes/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
{
"name": {
"de": "Wochenkarte",
"en": "Week pass"
},
"transferable": false,
"allow_parallel_usage": false,
"max_usages": 7
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 201 Created
Vary: Accept
Content-Type: application/json
{
"id": 3,
"name": {
"de": "Wochenkarte",
"en": "Week pass"
},
"transferable": false,
"allow_parallel_usage": false,
"max_usages": 7
}
:param organizer: The ``slug`` field of the organizer to create a membership type for
:statuscode 201: no error
:statuscode 400: The membership type could not be created due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to create this resource.
.. http:patch:: /api/v1/organizers/(organizer)/membershiptypes/(id)/
Update a membership type. You can also use ``PUT`` instead of ``PATCH``. With ``PUT``, you have to provide all fields of
the resource, other fields will be reset to default. With ``PATCH``, you only need to provide the fields that you
want to change.
You can change all fields of the resource except the ``id`` field.
**Example request**:
.. sourcecode:: http
PATCH /api/v1/organizers/bigevents/membershiptypes/2/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
Content-Length: 94
{
"max_usages": 3
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"id": 2,
"name": {
"de": "Wochenkarte",
"en": "Week pass"
},
"transferable": false,
"allow_parallel_usage": false,
"max_usages": 3
}
:param organizer: The ``slug`` field of the organizer to modify
:param id: The ``id`` field of the membership type to modify
:statuscode 200: no error
:statuscode 400: The membership could not be modified due to invalid submitted data
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to change this resource.
.. http:delete:: /api/v1/organizers/(organizer)/membershiptypes/(id)/
Delete a membership type. You can not delete types which have already been used.
**Example request**:
.. sourcecode:: http
DELETE /api/v1/organizers/bigevents/membershiptype/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 204 No Content
Vary: Accept
:param organizer: The ``slug`` field of the organizer to modify
:param id: The ``id`` field of the type to delete
:statuscode 204: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to delete this resource **or** the membership type is currently in use.
+10
View File
@@ -31,6 +31,7 @@ testmode boolean If ``true``, th
secret string The secret contained in the link sent to the customer
email string The customer email address
phone string The customer phone number
customer string The customer account identifier (or ``null``)
locale string The locale used for communication with this customer
sales_channel string Channel this sale was created through, such as
``"web"``.
@@ -118,6 +119,10 @@ last_modified datetime Last modificati
The ``phone`` attribute has been added.
.. versionchanged:: 4.0
The ``customer`` attribute has been added.
.. _order-position-resource:
@@ -289,6 +294,7 @@ List of all orders
"url": "https://test.pretix.eu/dummy/dummy/order/ABC12/k24fiuwvu8kxz3y1/",
"email": "tester@example.org",
"phone": "+491234567",
"customer": null,
"locale": "en",
"sales_channel": "web",
"datetime": "2017-12-01T10:00:00Z",
@@ -457,6 +463,7 @@ Fetching individual orders
"url": "https://test.pretix.eu/dummy/dummy/order/ABC12/k24fiuwvu8kxz3y1/",
"email": "tester@example.org",
"phone": "+491234567",
"customer": null,
"locale": "en",
"sales_channel": "web",
"datetime": "2017-12-01T10:00:00Z",
@@ -775,6 +782,8 @@ Creating orders
* does not support redeeming gift cards
* does not support or validate memberships
You can supply the following fields of the resource:
* ``code`` (optional)
@@ -783,6 +792,7 @@ Creating orders
or in state ``confirmed``, depending on this value. If you create a paid order, the ``order_paid`` signal will
**not** be sent out to plugins and no email will be sent. If you want that behavior, create an unpaid order and
then call the ``mark_paid`` API method.
* ``customer`` (optional) Customer identifier or ``null``
* ``testmode`` (optional) Defaults to ``false``
* ``consume_carts`` (optional) A list of cart IDs. All cart positions with these IDs will be deleted if the
order creation is successful. Any quotas or seats that become free by this operation will be credited to your order
+1
View File
@@ -25,6 +25,7 @@ limit_events list List of event s
can_create_events boolean
can_change_teams boolean
can_change_organizer_settings boolean
can_manage_customers boolean
can_manage_gift_cards boolean
can_change_event_settings boolean
can_change_items boolean