{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"6bbfcb1a-fb37-f71c-fdc3-0714c60acb33","name":"REST V3","description":"# P3 Rest API\n\nVersion 3 of the P3 API is a RESTful interface. Records are created, updated, listed and queried using a standard HTTP verbs sent to resource endpoints. P3 supports requests made in either JSON or XML. Responses are returned in JSON or XML, as requested.\n\n## Using Postman\n\nYou can interact with our api via postman. To do so, download the Postman app and click Run in Postman on the top right of this site. Then create an environment and set the environment variables\n\n- url = p3expeditor.xyz\n- api_key = the api key we provide for you\n    \n\n## Requests\n\nAll requests should be made over HTTPS. P3's test api server is [https://p3expeditor.xyz/api/v3](https://test.p3expeditor.info/api/v3). All test requests should be sent to that endpoint. Once you are ready to move your integration into production, contact us and we will provide a production url.\n\n### Content-Type: XML and JSON\n\nAll requests will expect JSON and return JSON unless you explicitly set the Content-Type header to `application\\xml`\n\n## Authentication\n\nAuthentication is provided via two factors. First, the P3 api is protected by firewall rules that limit connections to known ips. Please provide a list of test and production ips that you will be requesting from.\n\nSecond, each request must contain an api key in the Authorization header of the request. This key is unique to the enterprise you are querying for. This key should be protected and never exposed to client side requests.\n\nP3 will issue you two api keys, one for your test environment, and a separate one for your production environment.\n\n## Resources and Methods\n\nThe following resources are currently available in V3 of the P3 Api.\n\n- Customer\n- Supplier\n- Item\n- Job\n- Project\n    \n\nCustomers, Suppliers, and Items are simple, one dimensional objects. Jobs and Projects are more complex, with subrecords, attached objects and history fields. When retrieving a list of projects and jobs, you will get a simple flat object of header level data. To retrieve the full record, with attached line items, bids, quantities and versions, make a second request for the full single record.\n\n### HTTP Methods\n\nP3 currently supports HEAD, GET, POST and PUT requests. The P3 API does not allow you to delete records at present. These methods allow the following requests -\n\n- List all in a resource - `GET` : `https://{url}/api/v3/{resource}`\n- Get a single record - `GET` : `https://{url}/api/v3/{resource}/{index}`\n- Create a new record - `POST` : `https://{url}/api/v3/{resource}`\n- Update a record - `PUT` : `https://{url}/api/v3/{resource}/{index}`\n- Query a list by a single field - `GET` : `https://{url}/api/v3/{resource}/{field}/`\n    \n\n### Paging\n\nFor performance reasons, queries and lists will be limited to 1000 records. To retrieve the next page, pass the query string ?page=1. If your query returns less than 1000 pages you are on the last page.\n\n### Required fields\n\nThe P3 API does not have hard \"requirements\" for fields. P3 will attempt to default all fields to sane defaults because our customers have a wide range of requirements. All create and update requests will be sparse, so you can only submit the fields you want to add or update and we will default the rest of the fields.\n\n### Time and Dates\n\nP3 expects dates to be submitted in GMT and will be returned as GMT.\n\n### Error Handling\n\nIf your query went as expected, P3 will return a 200 status code, and the body of the response will contain the JSON or XML that you requested.\n\nIf an exception is encountered, the P3 api will not return a 200 message. We will either one of the following\n\n- 403 error (forbidden) - You don't have access either because your ip doesn't match, or because your api key is incorrect\n- 404 error (not found) - The record id you are looking for on a show or update can't be found\n- 405 error (method not available) - The method you called is impossible (PUT without id, DELETE etc)\n- 422 error (Unparseable Entity) - The json or xml you sent can't be parsed, or we threw an exception processing your request\n    \n\nWe will also return a JSON or XML formatted message with an error message that should tell you exactly what went wrong. If for any reason you get an error you don't understand or seems wrong, please let us know and send us the response body so we can investigate.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"1805388","team":87710,"collectionId":"6bbfcb1a-fb37-f71c-fdc3-0714c60acb33","publishedId":"RVfvEBfU","public":true,"publicUrl":"https://api.help.p3software.com","privateUrl":"https://go.postman.co/documentation/1805388-6bbfcb1a-fb37-f71c-fdc3-0714c60acb33","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EF5B25"},"documentationLayout":"classic-double-column","customisation":null,"version":"8.10.1","publishDate":"2022-05-31T14:47:05.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{},"logos":{}},"statusCode":200},"environments":[],"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/afbd34234fa8499580307b32f92e69924a3b73af18749d0677ff9ef5d0b2dfc7","favicon":"https://p3software.com/favicon.ico"},"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"}],"canonicalUrl":"https://api.help.p3software.com/view/metadata/RVfvEBfU"}