If you have a ticket form with custom fields in them, you can create or update tickets with value for those custom fields - entirely via APIs. Say, you want to update value for the custom field which goes by the label Gadget in your ticket form, then follow the steps below. Replace API_KEY and domain.freshdesk.com wherever it occurs with your API key and domain URL respectively.
Step 1: Get the name of the Custom Field
To get the name of the custom field Gadget, use the following API call. This API will list all the ticket fields - both default (like status, requester email, priority, etc.) and custom.
Request URI: https://domain.freshdesk.com/api/v2/ticket_fields
Request Method: GET
Sample Code:
curl -u API_KEY:X -X GET https://domain.freshdesk.com/api/v2/ticket_fields
Sample Response:
You can filter out the ticket field which has label tag as Gadget. In the above example, the name of our custom field is gadget.
[ { "id": 13, "default": false, "description": "", "label": "gadget", "name": "gadget", "position": 1, "required_for_closure": false, "type": "custom_text", "required_for_agents": false, "required_for_customers": false, "label_for_customers": "gadget", "customers_can_edit": true, "displayed_to_customers": true, "created_at": "2016-02-05T13:35:39Z", "updated_at": "2016-02-05T13:35:39Z" }, { "id": 1, "default": true, "description": "Ticket requester", "label": "Search a requester", "name": "requester", "position": 4, "required_for_closure": false, "portal_cc": false, "portal_cc_to": "company", "type": "default_requester", "required_for_agents": true, "required_for_customers": true, "label_for_customers": "Requester", "customers_can_edit": true, "displayed_to_customers": true, "created_at": "2016-01-04T09:19:43Z", "updated_at": "2016-02-05T13:35:40Z" }, { "id": 2, "default": true, "description": "Ticket subject", "label": "Subject", "name": "subject", "position": 5, "required_for_closure": false, "type": "default_subject", "required_for_agents": true, "required_for_customers": true, "label_for_customers": "Subject", "customers_can_edit": true, "displayed_to_customers": true, "created_at": "2016-01-04T09:19:43Z", "updated_at": "2016-02-05T13:35:40Z" }, ]
Step 2: Create tickets with custom fields
Request uri: https://domain.freshdesk.com/api/v2/tickets
Request Method: POST
Sample Code:
curl -u API_KEY:X -H "Content-Type: application/json" -X POST -d '{ "description": "Details about the issue...", "subject": "Support Needed...", "email": "tom@outerspace.com", "priority": 1, "status": 2, "cc_emails": ["ram@freshdesk.com","diana@freshdesk.com"], "custom_fields" : { "gadget": "Cold Welder"} }' 'https://domain.freshdesk.com/api/v2/tickets'
Sample Response:
{ "cc_emails":[ "ram@freshdesk.com", "diana@freshdesk.com" ], "fwd_emails":[ ], "reply_cc_emails":[ ], "description":"Details about the issue...", "description_html":"Details about the issue\u2026", "fr_escalated":false, "spam":false, "email_config_id":null, "group_id":null, "priority":1, "requester_id":119, "responder_id":null, "source":2, "status":2, "subject":"Support Needed...", "custom_fields":{ "gadget":"Cold Welder" }, "to_emails":null, "product_id":null, "id":8, "type":null, "created_at":"2016-02-05T13:44:35Z", "updated_at":"2016-02-05T13:44:35Z", "due_by":"2016-02-10T11:30:00Z", "fr_due_by":"2016-02-08T11:30:00Z", "is_escalated":false, "tags":[ ], "attachments":[ ] }
STEP 3: Update ticket with custom fields
Request uri: https://domain.freshdesk.com/api/v2/tickets/[id]
Request Method: PUT
Sample Code:
curl -u API_KEY:X -H "Content-Type: application/json" -X PUT -d '{ "subject": "Support Required", "priority": 2, "custom_fields" : { "gadget": "Plasma Cutter"} } 'https://domain.freshdesk.com/api/v2/tickets/8
Sample Response:
{ "cc_emails":[ "ram@freshdesk.com", "diana@freshdesk.com" ], "fwd_emails":[ ], "reply_cc_emails":[ ], "description":"Details about the issue...", "description_html":"Details about the issue\u2026", "fr_escalated":false, "spam":false, "email_config_id":null, "group_id":null, "priority":2, "requester_id":119, "responder_id":null, "source":2, "status":2, "subject":"Support Required", "custom_fields":{ "gadget":"Plasma Cutter" }, "to_emails":null, "product_id":null, "id":8, "type":null, "created_at":"2016-02-05T13:44:35Z", "updated_at":"2016-02-05T13:44:35Z", "due_by":"2016-02-10T11:30:00Z", "fr_due_by":"2016-02-08T11:30:00Z", "is_escalated":false, "tags":[ ], "attachments":[ ] }
NOTE 1: (This applies only for ticket custom_fields and not for contact/company custom_fields)
Names of custom fields are derived from the labels given to them during creation. If you create a custom field with the label 'test', then the name of the custom_field will be 'cf_test'. All custom fields will have 'cf_' prepended to its name.
NOTE 2: All API calls are dependent on the Name of the custom field and not its Label.