{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"9ac03958-b019-e939-ee3c-7c9c1d1636ee","name":"Contribution API Guide","description":"## Introduction:\n\nContribution API (CAPI) is a tool offered by Australian Tourism Data Warehouse (ATDW) to enable users with appropriate access to bulk contribute listings to [ATDW Platform](https://www.atdw-online.com.au/). Please click [here](https://atdw.com.au/listing-with-atdw/) to view the benefits of listing with ATDW.\n\n## Benefits of using CAPI:\n\nUse CAPI to automate bulk listing creation or bulk listing update process without the need to maually log into [ATDW Platform](https://www.atdw-online.com.au/) to create or update listings one by one which is time consuming.\n\nListings contributed via CAPI are quality assured and made available to over 250 distributors to use on their consumer websites and apps via [Distribution API](https://developer.atdw.com.au).\n\n## Tools:\n\nCAPI is built using [REST](http://en.wikipedia.org/wiki/Representational_State_Transfer) protocol and the requests are structured using [JSON](http://www.json.org/) format.\n\nAlthough ATDW use [Postman](https://www.getpostman.com/) as an internal testing tool, users can use any tool that supports REST protocol and JSON format.\n\n## Authentication:\n\n- All organisations require a unique API key to access the CAPI. Your API keys carry many privileges, so be sure to keep them secret and do not share your secret API keys.\n    \n- Organisations registered with the [ATDW-Online Platform](https://www.atdw-online.com.au/) can request permission to use CAPI by emailing [support@atdw.com.au](https://mailto:support@atdw.com.au).\n    \n- Your API key is available under the ‘ACCOUNT’ section of [ATDW-Online Platform](https://www.atdw-online.com.au/) when the permission is enabled for your account.\n    \n\n## ATDW Content Standards:\n\nCAPI is implemented using the content standards collectively approved by Government Tourism Organisations in each State. The content standards defines the fields applicable for each product category, data format, mandatory fields, minimum & maximum field limits, etc., which are documented under \"Create new listings\" section.\n\nViolation of the ATDW content standards during contribution may either result in failed contribution or contribute listing(s) with errors returned in the response body which can be interpreted using the errors section of this document.\n\nUsers can request the content standards document in Excel format by contacting [support@atdw.com.au](https://support@atdw.com.au)\n\nPlease note that the content standards are constantly evolving so, please refer to the release notes section for updated content standards.\n\n## Distribution API:\n\n- Access to [Distribution API](http://developer.atdw.com.au/) is required to obtain the current list of ID’s for Categories, Attributes, Locations, Tags, etc., that forms part of the CAPI request body.\n    \n\n## CAPI Endpoint:\n\n| HTTP Method | Endpoint | Description |\n| --- | --- | --- |\n| POST | https://{{environment}}/api/listings/contributions?apikey={{key}} | create new listings (or) update existing listings |\n| GET | https://{{environment}}/api/listings/{listingId}?apikey={{key}} | View / retrieve existing listing |\n\n- Replace {{environment}} with the appropriate test or production environment host. See Environment section of this documentation for more details.\n    \n- Replace {{key}} with your CAPI key found under the 'ACCOUNT' section by logging into the [ATDW Platform](https://atdw-online.com.au). If your API key is not available, please contact your relevant STO or email [support@atdw.com.au](https://support@atdw.com.au)\n    \n\n#### Environment:\n\n| Environment | Host |\n| --- | --- |\n| Staging / test | atlas.contentstaging.com.au |\n| Production | atlas.atdw-online.com.au |\n\n#### Query Parameter:\n\n| Key | Value | Description | Mandatory |\n| --- | --- | --- | --- |\n| apikey | Enter your API key | The unique reference to each contributing organisation | Yes |\n| skipEmail | false | Profile contributor will receive an email notification indicating the contribution status of each profile. This is the default behaviour if the parameter is not specified | No |\n| skipEmail | true | Profile contributor will NOT receive an email notification indicating the contribution status of each profile | No |\n\n#### Request Header:\n\n| Key | Value | Description | Mandatory |\n| --- | --- | --- | --- |\n| content-type | application/json | Denotes the encoding of the content | Yes |\n\n## Create vs. Update listings:\n\n- If the request body contains the field: \"productNumber\" (or) \"id\", the system will update the existing profile that matches the given product number or ID.\n    \n- If the \"productNumber\" or \"id\" is incorrect, the system will display the error \"listing not found\".\n    \n- Product number or ID can be obtained from CAPI response, [Distribution API](http://developer.atdw.com.au/) or [ATDW Platform](https://www.atdw-online.com.au).\n    \n- \"productNumber\": \"AU#######\"\n    \n\n## UID:\n\n- Each profile object within the request body must have a `UID` field to uniquely identify the profile.\n    \n- Each service object within the profile must have a `UID` field to uniquely identify the service.\n    \n- The `UID` must be supplied when creating brand new profile and not applicable for updating existing profile.\n    \n- The `UID` key/value pair must be unique for each profile.\n    \n- Both the key/value pair must be a string.\n    \n- The `UID` is a Universally Unique Identifier (UUID) or Globally Unique Identifier (GUID) which is a 128-bit number. The UUIDs/GUIDs are 36-character strings containing numbers, letters and dashes. UUIDs/GUIDs are designed to be globally unique.\n    \n- Please note that the `UID` is different to \"productNumber\" or \"id\".\n    \n- Feel free to generate random `UID` by clicking [here](https://www.uuidgenerator.net/version4).\n    \n- For more information on UUID/GUID, please click [here](https://bit.ly/2Y8jsQ3).\n    \n- \"UID\": \"c9543809-9ed2-453d-938f-1dc9f923fd9f\"\n    \n\n## Array ID:\n\n- Any fields of type array must contain the `arrayId` i.e., `arrayId` should be a part of each of the objects within an array when sending the request.\n    \n- The `arrayId` key/value pair must be unique for each array field.\n    \n- Both the key/value pair must be a string.\n    \n- The `arrayId` is a Universally Unique Identifier (UUID) or Globally Unique Identifier (GUID) which is a 128-bit number. The UUIDs/GUIDs are 36-character strings containing numbers, letters and dashes. UUIDs/GUIDs are designed to be globally unique.\n    \n- Unlike the UID, the array ID must be supplied irrespective of creating brand new or updating existing profile. This is due to the update process replacing or overwriting existing values.\n    \n- A few fields where \"arrayId\" is applicable are:\n    \n    - alternateNames\n        \n    - openingTime\n        \n    - externalSystemCodes\n        \n    - awards(admin only field)\n        \n- Feel free to generate random `arrayId` by clicking [here](https://www.uuidgenerator.net/version4).\n    \n- For more information on UUID/GUID, please click [here](https://bit.ly/2Y8jsQ3).\n    \n\n## Note:\n\n- Empty/null values are not allowed. For example, `\"emailEnquiries\": \"\"` without any values may contribute data but the listing may be marked as 'Draft'\n    \n- Redundant data are not allowed in the request. For example, `name` field appearing twice in the request body per `listing` object may not contribute or may contribute but the profile will be marked as 'Draft'.\n    \n- Image URLs in the request should be a public/direct link to the image without any credentials.\n    \n- `productNumber`, `id` and `UID` for a given listing are different and used for different purposes. Please see examples below:\n    \n    - `productNumber: AU0109980`\n        \n    - `id: 57ced33166f728062a32e82d`\n        \n    - `UID: c9543809-9ed2-453d-938f-1dc9f923fd9h`\n        \n- The Response body must be captured as a log. The log must be sent to ATDW upon request.\n    \n- If a profile is missing mandatory information or contains invalid data during contribution, it may fail to contribute or be created in **Draft** status. Draft profiles don’t receive marketing exposure until the contributor submits them for review. If they’re not resubmitted within **30 days**, the profile is automatically **Disabled.**  \n    \n\nFor any questions and/or suggestions, please contact our support desk at [support@atdw.com.au](https://support@atdw.com.au)","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":true,"owner":"14889","collectionId":"9ac03958-b019-e939-ee3c-7c9c1d1636ee","publishedId":"6YtzGQp","public":true,"publicUrl":"https://capi.atdw-online.com.au","privateUrl":"https://go.postman.co/documentation/14889-9ac03958-b019-e939-ee3c-7c9c1d1636ee","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EF5B25"},"documentationLayout":"classic-double-column","customisation":null,"version":"8.11.4","publishDate":"2020-06-10T22:06:48.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/768118b36f06c94b0306958b980558e6915839447e859fe16906e29d683976f0","favicon":"https://atdw-online.com.au/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://capi.atdw-online.com.au/view/metadata/6YtzGQp"}