{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"b8aebb0a-d0b4-4b2f-8ba6-6bf4c18134ab","name":"nexcore REST API Documentation","description":"# General aspects of the API\n\nThe phiosophy behind this API to empower the developers of our partner systems as well as our customers to easily integrate their own systems. We want to open up all relevant entities and give the possibility to react to all events occuring in nexcore. If endpoints or desired events are missing, please contact us at [service@nexato.de](https://). We will be happy to check the requirement and extend the API as soon as possible.\n\nAs soon as the API leaves the beta, we also ensure, that we offer migration plans/possibilities in case we are introducing breaking changes.\n\n## Creation of Entities\n\n- The API works top down where the root object is \"order\". This means that an order can include all child entities and those child entities can include theirs as well. Nexcore will try to match all entities to existing entities or create new ones. E. g. POST /api/v1/order can include: order, all line items, the connected articles, resourceAssignments, contact and contactPersons. Nexcore will match and create/update/delete them, only the identifiers of each object must be set right.\n    \n- Besides the top down aspect, one can also create all entites on their own: first the resource, than the article and at the end the order - all with different requests. The order of those requests is important since the client must add all the relations itselfs and the linkes entites must be available.\n    \n\n## Matching of Entities\n\nEspecially when an complete order with all child entities is sent to nexcore, it is important to have a look at the identifiers of each object. Nexcore tries to match an incoming entity to entities that are already existent in the database. If nexcore cannot find an existing entity, it will create a new one. It is important for the developer to look at the description of each entity and decide, which identifier he/she wants to use. In most cases the following are available:\n\n- id: UUID: The developer can send an attribute \"id\" of type \"UUID\" with each entity. This UUID will become the primary key in nexcore for this entity. If your system uses UUIDs to identify entites, this is the best way to go. Keep in mind: A UUID must be unique - not only within the entity class.\n    \n- externalId: String: The next best way is to use an externalId on an entity. An external id can be any string. This external id must be unique within the entity class. Nexcore will enfroce this. This externalId can be, e.g., the primary key in the developers system.\n    \n\n## Returned Entites/Associations and Batch Requests\n\n- As an input, Nexcore accepts objects containing their full child entities. Nevertheless Nexcore will only return ids of associated/related entities. Its up to the partner system to request the associated/related entities by itself with a second request.\n    \n- For each entity Nexcore offers an endpoint for batched requests that accepts multiple (up to 50) ids within the same request.\n    \n- The client should avoid to request associated/related entities in loops with one request for each: Those requests can end up with errors because of **rate limiting**. We will add details about the rate limiter soon. We will also include the requests left in the windows/bucket in the response headers soon. The rate limiting will be enforced per tenant, not per API key.\n    \n\n## API Keys and Authentication\n\nOne can generate API Keys in the web ui: \"Einstellungen\" > \"API-Keys\".\n\n**Note:** Please write down your generated API-Key in a secure area. Since we are storing an hash value of the API-Key only, we cannot recover an lost API key. The key must be regernated and reset in all systems, where the API key is used.\n\nTo connect to the nexcore API two headers must be set:\n\n- \"x-auth-apiKey\": The actual API key that was generated in the ui.\n    \n- \"x-auth-apiKeyId\": The id belonging to the API key (first column of the API key table)\n    \n\n## Events\n\nOne core aspect of Nexcore is a comprehensive event notification system. The partner system can subscribe itstelf to events and react on those events. At this time there are two delivery mechanism in place. It is up to the partner system, which delivery mechanism is used. Since they are specified for each subscription and not globally, its possible to even mix them up:\n\n#### Webhook\n\nDuring subscription creation the partner system tells Nexcore the events of interest and an endpoint. Nexcore will try to up two three times to delivery the event to the specified address. After three failed attempts, the event will be stored as \"failed\" and can be retriggered.\n\n#### Persistent\n\nThe events of interest are stored within our database and can be requested with REST calls to the open events endpoint regularly (polling). The partner system must then acknowledge the receipt of the event by calling the close event endpoint. This approach is best used, if the system resides behind Firewalls/NATs where its complicated to offer public endpoints. Please keep in mind to not set the polling intervall to an appropriate interval. E.g. requesting each 10ms will end in problems with the rate limiter. Events can then be catched in a batched way.\n\nWe will provide an endpoint that returns all available events soon.\n\n### Custom Attributes\n\nCustom attributes are the core for customizing the system. Each partner system and customer can create and mantain custom attributes on entities. The following entities are having custom attributes:\n\n- Order\n    \n- LineItem\n    \n- ResourceAssignment\n    \n- Resource\n    \n\nThis can be extended to any other entity. If there is a need for this, please shot an email to [service@nexato.de](https://mailto:service@nexato.de).\n\nCustom Attributes are split into to parts:\n\n- CustomAttributeSections: They are grouping custom attributes within an entity\n    \n- CustomAttributesDefinitions: They are the defitionions of the custom attributes and telling nexcore, what are the type, label and order.\n    \n\n<img src=\"https://content.pstmn.io/98e38fa3-c1a1-41c3-8323-8a253ddb7c3f/Y3VzdG9tYXR0cmlidXRlcy5wbmc=\">\n\n# Order Types\n\nNexcore can currently import two order types:\n\n- RENTAL\n    \n- OPERATED_RENTAL\n    \n\nRENTAL is the standard rental process, where nexcore  \ngenerates, depending on the given resources, resourceAssignments and scheduling information, handover and return tasks. OPERATED_RENTAL is a rental with an operator, where nexcore creates assignments (tasks) for qualified personnel to operate the equipment during the rental period.\n\nNexcore's field requirements vary according to order type. You can find the specific field requirements for each entity detailed in its respective chapter of the documentation.\n\n## Rental\n\nA rental process in its default and minimal configuration will create either a handover or a return task for each resource, depending on whether the belonging resource assignment is free or not free.\n\nThe process behind a rental order maintains a state for the order itself, each lineItem, and each resource assignment underneath the line items. An order transitions to the state \"RUNNING\" as soon as the first resource was handed over to the customer. An order transitions to the state \"COMPLETED\" as soon as all \"lineItems\" are in the state COMPLETED. A line item is in the state completed as soon as all resource assignments are in the state completed. A resource assignment gets into the state completed as soon as there are no more open tasks for this resource assignment left. The developer can use the events listet in \"events\" to get notified about state transitions.\n\n## Operated Rental\n\nThe operated rental process generates automatic tasks that operators can assign and use to log their work hours. These tasks form the foundation of both workflow coordination and time tracking. Nexcore provides two strategies for task creation: an automatic approach that generates tasks from resource assignments, and a manual approach where developers can explicitly specify which tasks to create using the API.\n\n### Task Creation Strategies\n\nThe system offers two strategies for creating tasks:\n\n#### Auto Strategy\n\nThe Auto strategy intelligently manages task creation by:\n\n- Processing all resource assignments automatically\n    \n- Creating one task per day for each matching resource assignment\n    \n- Following a \"rolling window\" approach to task generation\n    \n\nTask generation rules:\n\n- Initially generates a maximum of 10 days of future tasks from the resource assignment start date\n    \n- For longer assignments, automatically adds new tasks as time progresses\n    \n- Maintains a consistent 10-day future visibility window\n    \n\nExample:\n\nFor a resource assignment running from January 10-30, 2025:\n\n| Current Date | **Tasks Visible in System** |\n| --- | --- |\n| January 1 | 10 tasks (Jan 10-20) |\n| January 9 | 10 tasks (Jan 10-20) |\n| January 10 | 10 tasks (Jan 10-20) |\n| January 11 | 11 tasks (Jan 10-21) |\n\nThis approach ensures tasks are always available for scheduling while preventing system overload with excessive future tasks. Note that while all tasks will eventually be created, they appear  \nprogressively rather than all at once upon import.\n\nExample orders can be found here [link](https://documenter.getpostman.com/view/17152908/2s8YzP355q#dbfeb035-3677-4cbd-8208-9aeff02b35cc).\n\n#### External Strategy\n\nThe External strategy relies on information provided through the API to create tasks. This approach gives precise control over task creation by directly specifying which tasks should be created, along with their due dates, times, and associated resources. Through an external ID, each task that is created can be linked to entities in the partner system. In addition, it is possible to directly assign a task to a user in Nexcore, using either the user’s ID or the user’s external ID.\n\nExample orders can be found here [link](https://documenter.getpostman.com/view/17152908/2s8YzP355q#fc58ae72-bc23-4d48-87e4-7b56d72430fc).\n\n_**Attention:**_\n\nFor **both strategies**, any tasks with a due date more than 30 days in the past that have not been marked as complete will be automatically removed from the system to ensure that the underlying process will complete properly and no obsolete tasks are left in the system.\n\nFor the **external strategy**, the limit of task templates is set to a default value of 20. If a developer needs more, please reach out to [service@nexato.de](https://null) — we can manually adjust this limit. Depending on users’ needs, we will likely add a rolling window for task creation in the external strategy as well. This means that tasks will be created and deleted during a daily reconciliation run if a certain number of task templates is reached. Keep this in mind during development. The assignment of a task using a task template is currently only possible when the task is created (the first time the task template is sent to Nexcore). This is intentional. If it is necessary to assign, unassign, or reassign a task after it has been created, please reach out to [service@nexato.de](https://null).\n\n### Implementation Plan\n\n**First**, determine which task creation strategy best meets your requirements:\n\n**External Strategy**  \nChoose this if you need precise control over which tasks the system creates. Task assignment can be either done manually in Nexcore or via API (direct assignment is not yet available but planned for end of April).\n\n**Auto Strategy**  \nSelect this if you prefer to provide orders with resource assignments and allow users to decide within Nexcore which tasks they want to add or remove (in addition to automatically generated ones) and manually assign to users.\n\n**Second**, check which event best fits your needs to capture time entries:\n\n- **operatedRental.order.completed**: This event is sent when the whole order completes. The developer can then request all time entries for the entire order at once.\n    \n- **operatedRental.order.taskCompleted**: This event is sent every time a task is completed in an order. The developer can request time entries for the specific task.\n    \n\nUse **operatedRental.order.completed** when it's sufficient to collect all time logs after all tasks in an order are completed. Use **operatedRental.order.taskCompleted** when your system should stay up-to-date with the latest information and needs the time entries as soon as they are available.\n\n**Third**, collect Time Entries:\n\nAdd TimeEntryCategories to Nexcore either via API or the GUI. Each TimeEntryCategory can optionally have an externalId where the developer can relate the category to their system.\n\nWhen you receive a _operatedRental.order.completed_-Event, call the getTimeEntries-Endpoint with filter ownerId=orderId. This will return all timeEntries for this order including, if set, the externalId. When you receive a _operatedRental.order.taskCompleted_-Event, call the getTimeEntries-Endpoint with filter taskId=taskId. This will return all timeEntries for this task including, if set, the externalId of the category.\n\n# Entities\n\n### Order\n\nAn order is the root object in Nexcore. It holds all information about the customer, contactPersons, addresses, articles, lineItems and so on.\n\n### LineItem\n\nA LineItem is a generic position in an order. A LineItem holds a connection to an article and multiple resourceAssignments.\n\n### Article\n\nAn article is the type of object that will be delivered and has, usually, a price. E.g. \"Scherenarbeitsbühne 23m\".\n\n### Resource\n\nA Resource is the physical representation of an article, e.g. a real, existing working platform or other rental equipment or accessories.\n\n### ResourceAssignment\n\nAn ResourceAssignment is the connection between an line item and a resource. It has a start date, end date and several information attached for delivery/pickup. Those entities and the contained information are used to create delivery and pickup tasks.\n\n### Contact\n\nA contact is the entity that placed the order. Or, in other words, the customer who placed the order.\n\n### ContactPerson\n\nA contactPerson identifies person associated to a contact. They can be used as contact persons on site, e.g. in delivery tasks or for sending out protocoles.\n\n### Address\n\nThe address entity is used to define pickup and delivery addresses as well as addresses of contacts.\n\n### **Protocol** _**(beta)**_\n\nThe protocol represents the form the user has filled out.\n\nThis will be released in phases starting from 20th of March.\n\n1. _Step - available 20th of March_: Endpoint will be availble to request protocols by its id. The protocols will contain basic data, like completion time and user. It will include a plain dump (key value pair) of the model (the \"filled out values\"). (available 20th of March)\n    \n2. _Step - available 3rd of_ April: The model will be substituted by a more readable DTO that holds specific DTOs for each control type. Those specialized DTOs will include the following information:\n    \n    1. label of the control\n        \n    2. key of the control\n        \n    3. a \"readable\" value instead of the plain value - e.g. direct links to pictures\n        \n\nIn addition nexato will delivery a documentation on each control type and the meaning of the value objects.\n\nPlease see the documentation of the endpoint for further details.\n\n### SchedulingInformation\n\nThis object is used to encapsulate information relevant for the scheduling of deliveries, pickups and handovers. Since this is an embedded object and does not have its own rest endpoint the fields will be described here. The information that is required depends on the order type. E.g. for successfully scheduling a delivery of a rental order, it is necessary to provide at least a delivery type, a date time period and an address. Nexcore looks for the most specific value: E.g. if a date time period and a delivery date time period is given, nexcore will use the date time period for pickup and the delivery date time period for scheduling the delivery. The same logic works for addresses, too.\n\nFields:\n\n- id: UUID: The unige Identifier of this scheduling information object.\n    \n- handlingType: HandlingType: Describes, how the order type specific entities should be handled. Currently DELIVERY and PICKUP is supported. DELIVERY means, that a driver will bring the item to the customer and collect it afterwards. PICKUP means, that the customer will collect it and bring it back afterwards. Only for orders of type RENTAL.\n    \n- outHandlingType: HandlingType: Can be used to overwrite the handling type, e.g. in rental orders for the part to handing over the machine to the customer. Only for orders of type RENTAL.\n    \n- inHandlingType: HandlingType: Can be used to overwrite the handling type, e.g. in rental orders for the part to returning the machine from the customer. Only for orders of type RENTAL.\n    \n- dateTimePeriod: DateTimePeriod: The date time period. Currently not used.\n    \n- outDateTimePeriod: DateTimePeriod: The date time period, when the item should be handed over to the customer, either by pickup or delivery. Only for orders of type RENTAL.\n    \n- inDateTimePeriod: DateTimePeriod: The date time period, when the item should be returned from the customer, either by pickup or delivery. Only for orders of type RENTAL.\n    \n- address: Address: The address where the item should be delivered and collected or where the equipment will be operated during the rental period.\n    \n- inAddress: Address: The address where the item should be delivered, can be used to overwrite the address attribute. Only for orders of type RENTAL.\n    \n- outAddress: Address: The address where the item should be collected, can be used to overwrite the address attribute. Only for orders of type RENTAL.\n    \n- contactPersons: \\[ContactPerson\\]: A list of contact persons. Should be used for contact persons on site.\n    \n- depot: Location: The warehouse from which the resource is to be delivered/picked up and returned to/at which it is to be returned. _(available 15th of April)_\n    \n- outDepot: Location: The warehouse from which the resource is to be delivered/picked up. _(available 15th of April)_\n    \n- inDepot: Location: The warehouse from which the resource is to be returned to/at which it is to be returned. _(available 15th of April)_\n    \n\n### DateTimePeriod\n\nThe DateTimePeriod-Object is a complex object to reflect different time types, e.g. a fix point in time, where the delivery of a resource is due, or a time window, in which the resource can be delivered.\n\nFields:\n\n- id: UUID: The unige Identifier of this scheduling information object.\n    \n- modifier: DateTimePeriodModifier: The modifier determines the logic behind this DateTimePeriod and determines, which fields are required, too. Currently the following modifiers are possible:\n    \n    - BETWEEN: fromDateTime and toDateTime is required\n        \n    - BEFORE: dateTime is required\n        \n    - AFTER: dateTime is required\n        \n    - EXACT: dateTime is required\n        \n- dateTime: ISO-Timestamp\n    \n- fromDateTime: ISO-Timestamp\n    \n- toDateTime: ISO-Timestamp\n    \n- precision: DATE or DATE_TIME: When set to DATE, nexcore displays only the date portion (e.g., 20.01.2025). When set to DATE_TIME, nexcore displays both date and time (e.g., 20.01.2025 13:45). Note that regardless of display format, internal filtering always operates on the complete timestamp. For DATE precision, developers should use the UTC equivalent of the start of day (00:00:00) when sending date values.\n    \n\n### Location\n\nLocations are representations of physical locations the company using nexcore has: Locations are flexibe objects, that could have at least one of those types:\n\n- COMPANY: This is a branch office/subsidiary. Orders can be associated with locations of type COMPANY. There must be at least one location in nexcore of type COMPANY. If more than one location is present in the system, each order must have an identifier of the location that order should be associated with. This could be either the id of the location or the external id.\n    \n- TOURBASE: A location with having the attribute \"TOURBASE\" can be used as start and end address for a tour. Users with role driver can be associated with those location to narrow down the list of potential drivers.\n    \n- _(DEPOT: A resource can be assigned to a depot. The depot is the location where it is stored (Lagerplatz). Not yet implemented.)_\n    \n\n### TimeEntry\n\nA record of time spent on work activities that is:\n\n- Attached to a task or to another, larger owner such as an order\n    \n- Contains start time and end time\n    \n- Includes duration\n    \n- Stores category information for the time log\n    \n\n## Return Codes\n\nThe following list shows the return codes sent by Nexcore and their meaning:\n\n| **Return Code** | **Meaning** |\n| --- | --- |\n| 200 | The request was processed successfully. |\n| 401 | The request required authentication. |\n| 404 | Nexcore could not find the requested entity. |\n| 500 | Internal server error. If the error persists after retry, please contact support. |\n| 503 | Nexcore is under maintanance and cannot handle requests at this time. A retry at a later stage is necessary. |","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"17152908","team":2375734,"collectionId":"b8aebb0a-d0b4-4b2f-8ba6-6bf4c18134ab","publishedId":"2s8YzP355q","public":true,"publicUrl":"https://documenter-api.postman.tech/view/17152908/2s8YzP355q","privateUrl":"https://go.postman.co/documentation/17152908-b8aebb0a-d0b4-4b2f-8ba6-6bf4c18134ab","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EF5B25"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"light","themes":[{"name":"dark","logo":null,"colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":null,"colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EF5B25"}}]}},"version":"8.10.1","publishDate":"2024-03-07T15:18:21.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":null,"logoDark":null}},"statusCode":200},"environments":[{"name":"Nexcore prod 686b0b17","id":"1110ee90-84ba-44d3-a911-dfda735e83dc","owner":"17152908","values":[{"key":"username","value":"","enabled":true,"type":"default"},{"key":"password","value":"","enabled":true,"type":"secret"},{"key":"client_id","value":"frontend-web","enabled":true},{"key":"latest_order_id","value":"","enabled":true},{"key":"baseUrl","value":"https://api.nexcore.app","enabled":true},{"key":"keycloak_realm","value":"nexcore","enabled":true},{"key":"keycloak_url","value":"https://id.nexcore.app/realms","enabled":true,"type":"default"},{"key":"grant_type","value":"password","enabled":true,"type":"default"},{"key":"scope","value":"email profile tenant","enabled":true,"type":"default"},{"key":"currentApiKeyId","value":"","enabled":true,"type":"default"},{"key":"currentApiKey","value":"","enabled":true,"type":"default"},{"key":"defaultPagination","value":"{\n    \"number\": 0,\n    \"size\": 10\n}","enabled":true,"type":"default"}],"published":true}],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/e7a770f74c7309f06c7ea32ce6fcfc3b76c98414cdf28856f413c2d3393c33fd","favicon":""},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"},{"label":"Nexcore prod 686b0b17","value":"17152908-1110ee90-84ba-44d3-a911-dfda735e83dc"}],"canonicalUrl":"https://documenter.gw.postman.com/view/metadata/2s8YzP355q"}