********************* Reservations ********************* Rindap creates a Reservation subresource whenever a Task is reserved for a Worker. Rindap will provide the details of this Reservation subresource in the Assignment Callback HTTP request it makes to your application server. You can read more about `Reservations here `_ You have multiple options for handling a Reservation: * Respond to the Assignment Callback with an Assignment Instruction. * Call the REST API with how to handle it. You can read more about `Reservations here `_ Reservation Properties ----------------------- .. list-table:: Properties :widths: 25 50 :header-rows: 1 * - field - description * - **sid** - The unique string that we created to identify the Reservation resource. * - **account_sid** - The SID of the Account * - **workspace_sid** - The SID of the Workspace * - **worker_sid** - The SID of the reserved Worker resource * - **task_sid** - The SID of the reserved Task resource * - **reservation_status** - The current status of the reservation. Can be: pending, accepted, rejected. * - **date_created** - The date and time in GMT when the resource was created, specified in ISO 8601 format. * - **date_updated** - The date and time in GMT when the resource was last updated, specified in ISO 8601 format. * - **url** - The absolute URL of the RateLimitProfile resource * - **links** - The URLs of related resources. Accessing Reservations ^^^^^^^^^^^^^^^^^^^^^^^^^^^ There are 3 ways to access a Reservation resource: * For accessing a certain Reservation with Its SID , You can access It through Its Task or Worker. * For accessing all Reservations of a certain Task, you need to access through the Task * For accessing all Reservations of a certain Worker, you need to access through the Worker Through a Task: Fetching a Reservation --------------------------------------- .. http:get:: /v1/rindap-rest-gw/Workspaces/{WorkspaceSID}/Tasks/{TaskSID}/Reservations/{ReservationSID} This endpoint fetches a single Reservation with all its details .. list-table:: Query Parameters :widths: 20 15 5 60 :header-rows: 1 * - Parameter - Type - Default - Description * - **WorkspaceSID** - String - "" - The SID of the `Workspace` * - **TaskSID** - String - - - The SID of the Task * - **ReservationSID** - String - - - The SID of the Reservation Example code pieces using SDKs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Shell** .. code-block:: shell curl -X GET https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \ /Tasks/WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations/WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -H "Authorization: Bearer {YOUR_ACCOUNT_SID}.{YOUR_AUTH_TOKEN}" \ -H "Content-Type:application/x-www-form-urlencoded" **Java** .. code-block:: java // Install the Java helper library from rindap.com/docs/java/install import com.rindap.Rindap; // IMPORTING from com.rindap.rest.v1.workspace.task package import com.rindap.rest.v1.workspace.task.Reservation; public class Example { // Find your Account Sid and Token at rindap.com/console public static void main(String[] args) { Rindap.init("YOUR_ACCOUNT_SID","YOUR_AUTH_TOKEN"); Reservation r=Reservation.fetcher( "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", // Task SID "WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") .fetch(); System.out.println(r); } } **Python** .. code-block:: python from rindap.rest import Client from rindap.rest import Rindap # Authenticate client = Client("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN") rindap = Rindap(client) # Get Workspace with workspace_sid workspace = rindap.workspaces.get("WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") # Get Task with SID task = workspace.tasks.get("WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx").fetch() # Get reservation with SID reservation = task.reservations.get("WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx").fetch() print("Reservation SID: {}".format(reservation.sid)) print("Reservation Status: {}".format(reservation.reservation_status)) **JS** .. code-block:: javascript var Rindap = require('rindap'); // Authenticate var rindap = new Rindap("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN"); // Get a reservation with task and reservation SID rindap.workspaces('WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') .tasks("WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") .reservations("WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") .fetch(function(err, reservation) { console.log(reservation.sid); console.log(reservation.reservationStatus); }); **C#** .. code-block:: csharp using System; using Rindap; using Rindap.Rest.V1.Workspace.Task; class Program { static void Main(string[] args) { // Authenticate RindapClient.Init("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN"); // Fetch a reservation with SID var reservation = ReservationResource.Fetch( pathWorkspaceSid: "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", pathTaskSid: "WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", pathSid: "WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ); // Print Reservation Content Console.WriteLine("Reservation SID : " + reservation.Sid); Console.WriteLine("Reservation Status: " + reservation.ReservationStatus); } } **The above command returns JSON structured like this:** .. code-block:: json { "sid": "WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "workspace_sid": "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "worker_sid": "WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "task_sid": "WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "reservation_status": "rejected", "date_created": "2020-04-23T13:47:15+03:00", "date_updated": "2020-04-23T13:49:42+03:00", "url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Tasks/WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations/WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "links": { "task": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Tasks/WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "worker": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workers/WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "workspace": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } } Through a Task: Listing All Reservations of A Task ------------------------------------------------------ .. http:get:: /v1/rindap-rest-gw/Workspaces/{WorkspaceSID}/Tasks/{TaskSID}/Reservations This endpoint retrives all Reservations of a Task .. list-table:: Query Parameters :widths: 20 15 5 60 :header-rows: 1 * - Parameter - Type - Default - Description * - **WorkspaceSID** - String - "" - The SID of the `Workspace` * - **TaskSID** - String - - - The SID of the Task * - **ReservationStatus** - String - - - (optional) The current status of the reservation. Can be: pending, accepted, rejected, completed. Can be used for filtering * - **WorkerSid** - String - - - (optional) The SID of the reserved Worker. Can be used to filter the Reservations by Worker Example code pieces using SDKs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Shell** .. code-block:: shell curl -X GET https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \ /Tasks/WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations -H "Authorization: Bearer {YOUR_ACCOUNT_SID}.{YOUR_AUTH_TOKEN}" \ -H "Content-Type:application/x-www-form-urlencoded" **Java** .. code-block:: java // Install the Java helper library from rindap.com/docs/java/install import com.rindap.Rindap; // IMPORTING from com.rindap.rest.v1.workspace.task package import com.rindap.rest.v1.workspace.task.Reservation; public class Example { // Find your Account Sid and Token at rindap.com/console public static void main(String[] args) { Rindap.init("YOUR_ACCOUNT_SID","YOUR_AUTH_TOKEN"); Reservation.Reader reader = Reservation.reader( "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") .setReservationStatus(Reservation.Status.ACCEPTED) ; for(Reservation r:reader.read()) System.out.println(r); } } **Python** .. code-block:: python from rindap.rest import Client from rindap.rest import Rindap # Authenticate client = Client("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN") rindap = Rindap(client) # Get Workspace with workspace_sid workspace = rindap.workspaces.get("WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") # Get Task with SID task = workspace.tasks.get("WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx").fetch() # Get all reservation reservations = task.reservations.list(limit=10, page_size=100) for reservation in reservations: # Print Content of reservation print("Reservation SID: {}".format(reservation.sid)) print("Reservation Status: {}".format(reservation.reservation_status)) **JS** .. code-block:: javascript var Rindap = require('rindap'); // Authenticate var rindap = new Rindap("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN"); // List all reservations rindap.workspaces('WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') .tasks("WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") .reservations .list({ limit: 100, pageSize: 100 },function(err, reservations) { reservations.forEach(function(reservation) { console.log(reservation.sid); console.log(reservation.reservationStatus); }); }); **C#** .. code-block:: csharp using System; using Rindap; using Rindap.Rest.V1.Workspace.Task; class Program { static void Main(string[] args) { // Authenticate RindapClient.Init("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN"); // Get all reservations var reservations = ReservationResource.Read( pathWorkspaceSid: "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", pathTaskSid: "WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", limit: 100, pageSize: 100 ); foreach (var reservation in reservations) { // Print Reservation Content Console.WriteLine("Reservation SID : " + reservation.Sid); Console.WriteLine("Reservation Status: " + reservation.ReservationStatus); } } } **The above command returns JSON structured like this:** .. code-block:: json { "meta": { "page_size": 2147483647, "page": 0, "first_page_url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Tasks/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations?Page=0&PageSize=2147483647", "previous_page_url": null, "url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Tasks/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations?Page=0&PageSize=2147483647", "key": "", "next_page_url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Tasks/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations?Page=1&PageSize=2147483647" }, "reservations": [ { "sid": "WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "workspace_sid": "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "worker_sid": "WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "task_sid": "WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "reservation_status": "rejected", "date_created": "2020-04-23T13:47:15+03:00", "date_updated": "2020-04-23T13:49:42+03:00", "url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Tasks/WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations/WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "links": { "task": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Tasks/WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "worker": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workers/WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "workspace": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } } ] } Through a Task: Updating a reservation ---------------------------------------- .. http:put:: /v1/rindap-rest-gw/Workspaces/{WorkspaceSID}/Tasks/{TaskSID}/Reservations/{ReservationSID} .. note:: You can only update a Reservation while It's at the `pending` status You can update a Reservation by updating Its ``ReservationStatus``. * **accepted** - use this for accepting a reservation, which means that the Worker will process the Task * **rejected** - use this for rejecting a reservation.At this situation, Rindap will reject the Reservation and try to assing the Task to another available Worker * **completed** - This is a special status setting, a shortcut, for saying that the Reservation is accepted and the Task is completed , or can be considered completed. After receiving this status, * the Reservation will be updated as `accepted` * the Task will be updated as `completed` * the Worker will be updated as `idle` and will be availabe for Reservations This is useful for Workers with short-lived functions such as a WebService endpoint where your application does whatever needed to be done, instantaneously .. list-table:: Query Parameters :widths: 20 15 5 60 :header-rows: 1 * - Parameter - Type - Default - Description * - **WorkspaceSID** - String - - - The SID of the `Workspace` * - **TaskSID** - String - - - The SID of the Task * - **ReservationStatus** - String - - - the status of the reservation. Can be "accepted","rejected" or "completed" * - **ReservationSID** - String - - - The SID of the Reservation Example code pieces using SDKs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Shell** .. code-block:: shell curl -X PUT https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \ /Tasks/WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations/WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \ --data-urlencode 'ReservationStatus=accepted' \ --data-urlencode 'AssignmentStatus=pending' \ -H "Authorization: Bearer {YOUR_ACCOUNT_SID}.{YOUR_AUTH_TOKEN}" \ -H "Content-Type:application/x-www-form-urlencoded" **Java** .. code-block:: java // Install the Java helper library from rindap.com/docs/java/install import com.rindap.Rindap; // IMPORTING from com.rindap.rest.v1.workspace.task package import com.rindap.rest.v1.workspace.task.Reservation; public class Example { // Find your Account Sid and Token at rindap.com/console public static void main(String[] args) { Rindap.init("YOUR_ACCOUNT_SID","YOUR_AUTH_TOKEN"); Reservation r=Reservation .updater( "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", // Task SID "WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") .setReservationStatus(Reservation.Status.ACCEPTED) .update(); System.out.println(r); } } **Python** .. code-block:: python from rindap.rest import Client from rindap.rest import Rindap # Authenticate client = Client("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN") rindap = Rindap(client) # Get Workspace with workspace_sid workspace = rindap.workspaces.get("WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") # Get Task with SID task = workspace.tasks.get("WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx").fetch() # Get reservation with SID reservation = task.reservations.get("WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx").fetch() updated_reservation = reservation.update(reservation_status='rejected') print("Reservation SID: {}".format(updated_reservation.sid)) print("Reservation Status: {}".format(updated_reservation.reservation_status)) **JS** .. code-block:: javascript var Rindap = require('rindap'); // Authenticate var rindap = new Rindap("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN"); // Update a reservation with SID rindap.workspaces('WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') .tasks("WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") .reservations("WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") .update({ reservationStatus: 'rejected' },function(err, reservation) { console.log(err); console.log(reservation.sid); }); **C#** .. code-block:: csharp using System; using Rindap; using Rindap.Rest.V1.Workspace.Task; class Program { static void Main(string[] args) { // Authenticate RindapClient.Init("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN"); // Fetch a reservation with SID var reservation = ReservationResource.Update( pathWorkspaceSid: "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", pathTaskSid: "WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", pathSid: "WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", reservationStatus: ReservationResource.StatusEnum.Rejected ); // Print Reservation Content Console.WriteLine("Reservation SID : " + reservation.Sid); Console.WriteLine("Reservation Status: " + reservation.ReservationStatus); } } **The above command returns JSON structured like this:** .. code-block:: json { "sid": "WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "workspace_sid": "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "worker_sid": "WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "task_sid": "WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "reservation_status": "rejected", "date_created": "2020-04-23T13:47:15+03:00", "date_updated": "2020-04-23T13:49:42+03:00", "url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Tasks/WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations/WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "links": { "task": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Tasks/WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "worker": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workers/WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "workspace": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } } Through a Worker: Fetching a Reservation -------------------------------------------- .. http:get:: /v1/rindap-rest-gw/Workspaces/{WorkspaceSID}/Workers/{WorkerSID}/Reservations/{ReservationSID} This endpoint fetches a single Reservation with all its details .. list-table:: Query Parameters :widths: 20 15 5 60 :header-rows: 1 * - Parameter - Type - Default - Description * - **WorkspaceSID** - String - - - The SID of the `Workspace` * - **WorkerSID** - String - - - The SID of the Worker * - **ReservationSID** - String - - - The SID of the Reservation Example code pieces using SDKs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Shell** .. code-block:: shell curl -X GET https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \ /Workers/WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations/WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -H "Authorization: Bearer {YOUR_ACCOUNT_SID}.{YOUR_AUTH_TOKEN}" \ -H "Content-Type:application/x-www-form-urlencoded" **Java** .. code-block:: java // Install the Java helper library from rindap.com/docs/java/install import com.rindap.Rindap; // IMPORTING from com.rindap.rest.v1.workspace.worker package import com.rindap.rest.v1.workspace.worker.Reservation; public class Example { // Find your Account Sid and Token at rindap.com/console public static void main(String[] args) { Rindap.init("YOUR_ACCOUNT_SID","YOUR_AUTH_TOKEN"); Reservation r=Reservation.fetcher( "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", // Worker SID "WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") .fetch(); System.out.println(r); } } **Python** .. code-block:: python from rindap.rest import Client from rindap.rest import Rindap # Authenticate client = Client("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN") rindap = Rindap(client) # Get Workspace with workspace_sid workspace = rindap.workspaces.get("WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") # Get Worker with SID worker = workspace.workers.get("WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx").fetch() # Get reservation with SID reservation = worker.reservations.get("WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx").fetch() print("Reservation SID: {}".format(reservation.sid)) print("Reservation Status: {}".format(reservation.reservation_status)) **JS** .. code-block:: javascript var Rindap = require('rindap'); // Authenticate var rindap = new Rindap("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN"); // Get a reservation with worker and reservation SID rindap.workspaces('WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') .workers("WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") .reservations("WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") .fetch(function(err, reservation) { console.log(reservation.sid); }); **C#** .. code-block:: csharp using System; using Rindap; using Rindap.Rest.V1.Workspace.Worker; class Program { static void Main(string[] args) { // Authenticate RindapClient.Init("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN"); // Fetch a reservation with SID var reservation = ReservationResource.Fetch( pathWorkspaceSid: "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", pathWorkerSid: "WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", pathSid: "WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ); // Print Reservation Content Console.WriteLine("Reservation SID : " + reservation.Sid); Console.WriteLine("Reservation Status: " + reservation.ReservationStatus); } } **The above command returns JSON structured like this:** .. code-block:: json { "sid": "WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "workspace_sid": "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "worker_sid": "WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "task_sid": "WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "reservation_status": "rejected", "date_created": "2020-04-23T13:47:15+03:00", "date_updated": "2020-04-23T13:49:42+03:00", "url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workers/WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations/WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "links": { "task": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Tasks/WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "worker": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workers/WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "workspace": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } } Through a Worker: Listing All Reservations of A Worker ---------------------------------------------------------- .. http:get:: /v1/rindap-rest-gw/Workspaces/{WorkspaceSID}/Workers/{WorkerSID}/Reservations This endpoint retrives all Reservations of a Worker .. list-table:: Query Parameters :widths: 20 15 5 60 :header-rows: 1 * - Parameter - Type - Default - Description * - **WorkspaceSID** - String - - - The SID of the `Workspace` * - **WorkerSID** - String - - - The SID of the Worker * - **ReservationStatus** - String - - - (optional) The current status of the reservation. Can be: pending, accepted, rejected. Can be used for filtering Example code pieces using SDKs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Shell** .. code-block:: shell curl -X GET https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \ /Workers/WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations -H "Authorization: Bearer {YOUR_ACCOUNT_SID}.{YOUR_AUTH_TOKEN}" \ -H "Content-Type:application/x-www-form-urlencoded" **Java** .. code-block:: java // Install the Java helper library from rindap.com/docs/java/install import com.rindap.Rindap; //IMPORTING Reservation from com.rindap.rest.v1.workspace.worker import com.rindap.rest.v1.workspace.worker.Reservation; public class Example { // Find your Account Sid and Token at rindap.com/console public static void main(String[] args) { Rindap.init("YOUR_ACCOUNT_SID","YOUR_AUTH_TOKEN"); Reservation.Reader reader = Reservation.reader( "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); for(Reservation r:reader.read()) System.out.println(r); } } **Python** .. code-block:: python from rindap.rest import Client from rindap.rest import Rindap # Authenticate client = Client("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN") rindap = Rindap(client) # Get Workspace with workspace_sid workspace = rindap.workspaces.get("WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") # Get Worker with SID worker = workspace.workers.get("WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx").fetch() # Get all reservation reservations = worker.reservations.list(limit=10, page_size=100) for reservation in reservations: # Print Content of reservation print("Reservation SID: {}".format(reservation.sid)) print("Reservation Status: {}".format(reservation.reservation_status)) **JS** .. code-block:: javascript var Rindap = require('rindap'); // Authenticate var rindap = new Rindap("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN"); // List all reservations rindap.workspaces('WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') .workers("WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") .reservations .list({ limit: 100, pageSize: 100 },function(err, reservations) { reservations.forEach(function(reservation) { console.log(reservation.sid); console.log(reservation.reservationStatus); }); }); **C#** .. code-block:: csharp using System; using Rindap; using Rindap.Rest.V1.Workspace.Worker; class Program { static void Main(string[] args) { // Authenticate RindapClient.Init("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN"); // List all reservations var reservations = ReservationResource.Read( pathWorkspaceSid: "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", pathWorkerSid: "WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", limit: 100, pageSize: 100 ); foreach (var reservation in reservations) { // Print Reservation Content Console.WriteLine("Reservation SID : " + reservation.Sid); Console.WriteLine("Reservation Status: " + reservation.ReservationStatus); } } } **The above command returns JSON structured like this:** .. code-block:: json { "meta": { "page_size": 2147483647, "page": 0, "first_page_url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workers/WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations?Page=0&PageSize=2147483647", "previous_page_url": null, "url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workers/WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations?Page=0&PageSize=2147483647", "key": "", "next_page_url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workers/WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations?Page=1&PageSize=2147483647" }, "reservations": [ { "sid": "WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "workspace_sid": "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "worker_sid": "WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "task_sid": "WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "reservation_status": "rejected", "date_created": "2020-04-23T13:47:15+03:00", "date_updated": "2020-04-23T13:49:42+03:00", "url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workers/WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations/WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "links": { "task": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Tasks/WTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "worker": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workers/WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "workspace": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } } ] } Through a Worker: Updating a reservation ----------------------------------------------- .. http:put:: /v1/rindap-rest-gw/Workspaces/{WorkspaceSID}/Workers/{WorkerSID}/Reservations/{ReservationSID} .. note:: You can only update a Reservation while It's at the ``pending`` status You can update a Reservation by updating Its ``ReservationStatus``. * **accepted** - use this for accepting a reservation, which means that the Worker will process the Task * **rejected** - use this for rejecting a reservation.At this situation, Rindap will reject the Reservation and try to assing the Task to another available Worker * **completed** - This is a special status setting, a shortcut, for saying that the Reservation is accepted and the Task is completed , or can be considered completed. After receiving this status, * the Reservation will be updated as `accepted` * the Task will be updated as `completed` * the Worker will be updated as `idle` and will be availabe for Reservations This is useful for Workers with short-lived functions such as a WebService endpoint where your application does whatever needed to be done, instantaneously .. list-table:: Query Parameters :widths: 20 15 5 60 :header-rows: 1 * - Parameter - Type - Default - Description * - **WorkspaceSID** - String - - - The SID of the `Workspace` * - **WorkerSID** - String - - - The SID of the Worker * - **ReservationStatus** - String - - - the status of the reservation. Can be "accepted","rejected" or "completed" * - **ReservationSID** - String - - - The SID of the Reservation Example code pieces using SDKs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Shell** .. code-block:: shell curl -X PUT https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \ /Workers/WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Reservations/WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \ --data-urlencode 'ReservationStatus=accepted' \ -H "Authorization: Bearer {YOUR_ACCOUNT_SID}.{YOUR_AUTH_TOKEN}" \ -H "Content-Type:application/x-www-form-urlencoded" **Java** .. code-block:: java // Install the Java helper library from rindap.com/docs/java/install import com.rindap.Rindap; //IMPORTING Reservation from package com.rindap.rest.v1.workspace.worker import com.rindap.rest.v1.workspace.worker.Reservation; public class Example { // Find your Account Sid and Token at rindap.com/console public static void main(String[] args) { Rindap.init("YOUR_ACCOUNT_SID","YOUR_AUTH_TOKEN"); Reservation r=Reservation .updater( "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", // Worker SID "WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") .setReservationStatus(Reservation.Status.ACCEPTED) .update(); System.out.println(r); } } **Python** .. code-block:: python from rindap.rest import Client from rindap.rest import Rindap # Authenticate client = Client("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN") rindap = Rindap(client) # Get Workspace with workspace_sid workspace = rindap.workspaces.get("WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") # Get Worker with SID worker = workspace.workers.get("WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx").fetch() # Get reservation with SID reservation = worker.reservations.get("WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx").fetch() # Update Reservation updated_reservation = reservation.update(reservation_status='rejected') print("Reservation SID: {}".format(updated_reservation.sid)) print("Reservation Status: {}".format(updated_reservation.reservation_status)) **JS** .. code-block:: javascript var Rindap = require('rindap'); // Authenticate var rindap = new Rindap("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN"); // UPdate a reservation with SID rindap.workspaces('WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') .workers("WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") .reservations("WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") .update({ reservationStatus: 'rejected' },function(err, reservation) { console.log(err); console.log(reservation.sid); }); **C#** .. code-block:: csharp using System; using Rindap; using Rindap.Rest.V1.Workspace.Worker; class Program { static void Main(string[] args) { // Authenticate RindapClient.Init("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN"); // Update a reservation with SID var reservation = ReservationResource.Update( pathWorkspaceSid: "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", pathWorkerSid: "WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", pathSid: "WRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", reservationStatus: ReservationResource.StatusEnum.Completed ); // Print Reservation Content Console.WriteLine("Reservation SID : " + reservation.Sid); Console.WriteLine("Reservation Status: " + reservation.ReservationStatus); } } **The above command returns JSON structured like this:** .. code-block:: json { "sid": "WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "workspace_sid": "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "queues": [ "WQ00xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "WQ11xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "WQ22xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ], "activity": "idle", "available": true, "friendly_name": "my test worker", "date_created": "2020-05-04T11:03:41+03:00", "date_updated": "2020-05-04T11:03:41+03:00", "url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workers/WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "links": { "workspace": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } }