Snappy API Documentation
Introduction
All Snappy API end-points begin with https://app.besnappy.com/api/v1/
and use the HTTPS protocol. All requests should also pass a username and password or API key to authenticate via Basic Auth.
You may retrieve your API key via the "Your Settings" menu in Snappy. Once in the settings menu, the security tab will provide access to your API key. When authenticating via API key, pass the key as the "username" and any string (such as "x) as the password.
Response payloads are typically JSON; however, a few end-points return only a simple string identifier.
Rate Limiting
The current Snappy API rate limit is 200 requests per minute.
Endpoints
- Accounts
- Search
- Mailboxes
- Staff
- Contacts
- Waiting Tickets
- Inbox Tickets
- Your Tickets
- Ticket Details
- Ticket Notes
- Creating Tickets & Adding Notes
- Updating Ticket Tags
- Updating Ticket Status
- Deleting A Ticket
- Documents
- Downloading Documents
- Downloading Attachments
- Reading Team Wall
- Posting To Team Wall
- Deleting Wall Posts
- Commenting On Wall Posts
- Deleting Wall Comments
- Liking Wall Posts
- Unliking Wall Posts
- Searching FAQs
- Creating & Editing FAQs
- Creating & Editing FAQ Topics
- Creating & Editing FAQ Questions
/accounts
GET Retrieve all of the accounts the authenticated account has access to.
[
{
"id": 3,
"organization": "Snappy Help",
"domain": "help.besnappy.com",
"plan_id": 1,
"active": 1,
"created_at": "2012-12-05 15:24:20",
"updated_at": "2013-05-07 19:48:06",
"custom_domain": ""
}
]
/account/{id}/search
GET Perform a fuzzy search on an account's tickets.
Two items should be passed in the query string: query
and page
. The query
parameter is your plain text search query. The page
parameter allows you to indicate which page of results should be returned. Search results are returned with items for page.
In the search response, the meta
property will give you the total
amount of search results, not just the total for the current page.
{
"meta": {
"total": 15,
"page": 1
},
"data": [
// Tickets found by the search...
]
}
/account/{id}/mailboxes
GET Retrieve all of the mailboxes attached to an account.
[
{
"id": 3,
"account_id": 3,
"type": "email",
"address": "hello@help.besnappy.com",
"display": "Snappy Help",
"auto_responding": 0,
"auto_response": "",
"active": 1,
"created_at": "2012-12-05 15:24:20",
"updated_at": "2013-04-18 18:10:43",
"custom_address": null,
"theme": "snappy",
"local_part": "hello"
}
]
/account/{id}/staff
GET Retrieve all of the staff attached to an account.
[
{
"id": 3,
"email": "ian@userscape.com",
"sms_number": null,
"first_name": "Ian",
"last_name": "Landsman",
"photo": null,
"culture": "en",
"notify": 1,
"created_at": "2012-12-05 15:24:20",
"updated_at": "2013-05-07 20:26:35",
"signature": null,
"tour_played": 1,
"timezone": "America\/New_York",
"notify_new": 1,
"news_read_at": "2013-05-07 20:26:35",
"username": "ian"
}
]
/account/{id}/contacts/{id-or-email}
GET Retrieve a contact associated with an account.
[
{
"id": 1,
"account_id": 1,
"first_name": "Eugene",
"last_name": "Haag",
"value": "colleen.jenkins@example.com",
"provider": "email",
"created_at": "2013-12-02 14:55:27",
"updated_at": "2013-12-02 14:55:27",
"address": "colleen.jenkins@example.com"
}
]
/mailbox/{id}/waiting
GET Retrieve all of the waiting tickets from a mailbox.
[
{
"id": 1,
"account_id": 3,
"mailbox_id": 3,
"created_via": "email",
"last_reply_by": "customer",
"last_reply_at": 1368011747,
"opened_by_staff_id": null,
"opened_by_contact_id": 4,
"opened_at": 1367934047,
"status": "waiting",
"first_staff_reply_at": "2013-05-07 13:41:06",
"default_subject": "Re: Welcome to Snappy",
"summary": "Message summary",
"created_at": 1367934047,
"updated_at": "2013-05-08 11:15:47",
"unread": true,
"tags": [
"@ian"
],
"contacts": [
{
"id": 4,
"account_id": 3,
"first_name": "John",
"last_name": "Smith",
"value": "john.smith@gmail.com",
"provider": "email",
"created_at": "2013-05-07 13:40:47",
"updated_at": "2013-05-07 13:40:47",
"type": "from"
}
],
"mailbox": {
},
"opener": {
"id": 4,
"account_id": 3,
"first_name": "John",
"last_name": "Smith",
"value": "john.smith@gmail.com",
"provider": "email",
"created_at": "2013-05-07 13:40:47",
"updated_at": "2013-05-07 13:40:47"
}
}
]
/account/{id}/waiting
GET Retrieve all of the waiting tickets from an account.
[
{
"id": 1,
"account_id": 3,
"mailbox_id": 3,
"created_via": "email",
"last_reply_by": "customer",
"last_reply_at": 1368011747,
"opened_by_staff_id": null,
"opened_by_contact_id": 4,
"opened_at": 1367934047,
"status": "waiting",
"first_staff_reply_at": "2013-05-07 13:41:06",
"default_subject": "Re: Welcome to Snappy",
"summary": "Message summary",
"created_at": 1367934047,
"updated_at": "2013-05-08 11:15:47",
"unread": true,
"tags": [
"@ian"
],
"contacts": [
{
"id": 4,
"account_id": 3,
"first_name": "John",
"last_name": "Smith",
"value": "john.smith@gmail.com",
"provider": "email",
"created_at": "2013-05-07 13:40:47",
"updated_at": "2013-05-07 13:40:47",
"type": "from"
}
],
"mailbox": {
},
"opener": {
"id": 4,
"account_id": 3,
"first_name": "John",
"last_name": "Smith",
"value": "john.smith@gmail.com",
"provider": "email",
"created_at": "2013-05-07 13:40:47",
"updated_at": "2013-05-07 13:40:47"
}
}
]
/mailbox/{id}/inbox
GET Retrieve all of the new and unassigned (inbox) tickets from a mailbox.
[
{
"id": 1,
"account_id": 3,
"mailbox_id": 3,
"created_via": "email",
"last_reply_by": "customer",
"last_reply_at": 1368011747,
"opened_by_staff_id": null,
"opened_by_contact_id": 4,
"opened_at": 1367934047,
"status": "waiting",
"first_staff_reply_at": "2013-05-07 13:41:06",
"default_subject": "Re: Welcome to Snappy",
"summary": "Message summary",
"created_at": 1367934047,
"updated_at": "2013-05-08 11:15:47",
"unread": true,
"tags": [
"@ian"
],
"contacts": [
{
"id": 4,
"account_id": 3,
"first_name": "John",
"last_name": "Smith",
"value": "john.smith@gmail.com",
"provider": "email",
"created_at": "2013-05-07 13:40:47",
"updated_at": "2013-05-07 13:40:47",
"type": "from"
}
],
"mailbox": {
},
"opener": {
"id": 4,
"account_id": 3,
"first_name": "John",
"last_name": "Smith",
"value": "john.smith@gmail.com",
"provider": "email",
"created_at": "2013-05-07 13:40:47",
"updated_at": "2013-05-07 13:40:47"
}
}
]
/account/{id}/inbox
GET Retrieve all of the new and unassigned (inbox) tickets from an account.
[
{
"id": 1,
"account_id": 3,
"mailbox_id": 3,
"created_via": "email",
"last_reply_by": "customer",
"last_reply_at": 1368011747,
"opened_by_staff_id": null,
"opened_by_contact_id": 4,
"opened_at": 1367934047,
"status": "waiting",
"first_staff_reply_at": "2013-05-07 13:41:06",
"default_subject": "Re: Welcome to Snappy",
"summary": "Message summary",
"created_at": 1367934047,
"updated_at": "2013-05-08 11:15:47",
"unread": true,
"tags": [
"@ian"
],
"contacts": [
{
"id": 4,
"account_id": 3,
"first_name": "John",
"last_name": "Smith",
"value": "john.smith@gmail.com",
"provider": "email",
"created_at": "2013-05-07 13:40:47",
"updated_at": "2013-05-07 13:40:47",
"type": "from"
}
],
"mailbox": {
},
"opener": {
"id": 4,
"account_id": 3,
"first_name": "John",
"last_name": "Smith",
"value": "john.smith@gmail.com",
"provider": "email",
"created_at": "2013-05-07 13:40:47",
"updated_at": "2013-05-07 13:40:47"
}
}
]
/mailbox/{id}/yours
GET Retrieve all of the waiting tickets that are assigned to you.
[
{
"id": 1,
"account_id": 3,
"mailbox_id": 3,
"created_via": "email",
"last_reply_by": "customer",
"last_reply_at": 1368011747,
"opened_by_staff_id": null,
"opened_by_contact_id": 4,
"opened_at": 1367934047,
"status": "waiting",
"first_staff_reply_at": "2013-05-07 13:41:06",
"default_subject": "Re: Welcome to Snappy",
"summary": "Message summary",
"created_at": 1367934047,
"updated_at": "2013-05-08 11:15:47",
"unread": true,
"tags": [
"@ian"
],
"contacts": [
{
"id": 4,
"account_id": 3,
"first_name": "John",
"last_name": "Smith",
"value": "john.smith@gmail.com",
"provider": "email",
"created_at": "2013-05-07 13:40:47",
"updated_at": "2013-05-07 13:40:47",
"type": "from"
}
],
"mailbox": {
},
"opener": {
"id": 4,
"account_id": 3,
"first_name": "John",
"last_name": "Smith",
"value": "john.smith@gmail.com",
"provider": "email",
"created_at": "2013-05-07 13:40:47",
"updated_at": "2013-05-07 13:40:47"
}
}
]
/account/{id}/yours
GET Retrieve all of the waiting tickets that are assigned to you across an entire account (all mailboxes)
[
{
"id": 1,
"account_id": 3,
"mailbox_id": 3,
"created_via": "email",
"last_reply_by": "customer",
"last_reply_at": 1368011747,
"opened_by_staff_id": null,
"opened_by_contact_id": 4,
"opened_at": 1367934047,
"status": "waiting",
"first_staff_reply_at": "2013-05-07 13:41:06",
"default_subject": "Re: Welcome to Snappy",
"summary": "Message summary",
"created_at": 1367934047,
"updated_at": "2013-05-08 11:15:47",
"unread": true,
"tags": [
"@ian"
],
"contacts": [
{
"id": 4,
"account_id": 3,
"first_name": "John",
"last_name": "Smith",
"value": "john.smith@gmail.com",
"provider": "email",
"created_at": "2013-05-07 13:40:47",
"updated_at": "2013-05-07 13:40:47",
"type": "from"
}
],
"mailbox": {
},
"opener": {
"id": 4,
"account_id": 3,
"first_name": "John",
"last_name": "Smith",
"value": "john.smith@gmail.com",
"provider": "email",
"created_at": "2013-05-07 13:40:47",
"updated_at": "2013-05-07 13:40:47"
}
}
]
/ticket/{id}
GET Retrieve the details of a ticket.
{
"id": 1,
"account_id": 3,
"mailbox_id": 3,
"created_via": "email",
"last_reply_by": "customer",
"last_reply_at": 1368011747,
"opened_by_staff_id": null,
"opened_by_contact_id": 4,
"opened_at": 1367934047,
"status": "waiting",
"first_staff_reply_at": "2013-05-07 13:41:06",
"default_subject": "Re: Welcome to Snappy",
"summary": "Message summary",
"created_at": 1367934047,
"updated_at": "2013-05-08 11:15:47",
"unread": true,
"tags": [
"@ian"
],
"contacts": [
{
"id": 4,
"account_id": 3,
"first_name": "John",
"last_name": "Smith",
"value": "john.smith@gmail.com",
"provider": "email",
"created_at": "2013-05-07 13:40:47",
"updated_at": "2013-05-07 13:40:47",
"type": "from"
}
],
"mailbox": {
},
"opener": {
"id": 4,
"account_id": 3,
"first_name": "John",
"last_name": "Smith",
"value": "john.smith@gmail.com",
"provider": "email",
"created_at": "2013-05-07 13:40:47",
"updated_at": "2013-05-07 13:40:47"
}
}
/ticket/{id}/notes
GET Get all of the notes attached to a ticket.
[
{
"id": 102,
"account_id": 3,
"ticket_id": 11232,
"created_by_staff_id": null,
"created_by_contact_id": 4,
"scope": "public",
"created_at": 1368011747,
"updated_at": "2013-05-08 11:15:47",
"content": "Note content...",
"contacts": [
{
"id": 4,
"account_id": 3,
"first_name": "John",
"last_name": "Smith",
"value": "john.smith@gmail.com",
"provider": "email",
"created_at": "2013-05-07 13:40:47",
"updated_at": "2013-05-07 13:40:47",
"type": "from"
}
],
"attachments": [
],
"creator": {
"id": 4,
"account_id": 3,
"first_name": "John",
"last_name": "Smith",
"value": "john.smith@gmail.com",
"provider": "email",
"created_at": "2013-05-07 13:40:47",
"updated_at": "2013-05-07 13:40:47"
}
},
]
/note
POST Send a new note to one of the account's mailboxes. A ticket will automatically be created.
Posting a note "from" a customer:
{
"mailbox_id": 3,
"subject": "Message Subject",
"from": [
{"name": "John Smith", "address": "john.smith@gmail.com"}
],
"message": "Message Content"
}
Posting a note "to" a customer:
{
"mailbox_id": 3,
"staff_id": 2,
"subject": "Message Subject",
"to": [
{"name": "John Smith", "address": "john.smith@gmail.com"}
],
"message": "Message Content"
}
To attach a note to an existing ticket, just add the ticket nonce to the payload in the id
slot:
{
"id": "your-ticket-nonce",
"mailbox_id": 3,
"staff_id": 2,
"subject": "Message Subject",
"to": [
{"name": "John Smith", "address": "john.smith@gmail.com"}
],
"message": "Message Content"
}
To create a "private" note, set the scope on the JSON payload:
{
"id": "your-ticket-nonce",
"mailbox_id": 3,
"staff_id": 2,
"subject": "Message Subject",
"to": [
{"name": "John Smith", "address": "john.smith@gmail.com"}
],
"message": "Message Content",
"scope": "private"
}
/ticket/{id}/tags
POST Update the tags assigned to a ticket.
The POST request should contain a tags
field which contains a JSON encoded list of tags.
{
"tags": ["#tag1", "#tag2"]
}
/ticket/{id}/status
PUT Update the status of a ticket.
The PUT request should contain a status
field.
{
"status": "replied"
}
/ticket/{id}
DELETE Delete a ticket.
/account/{id}/documents
GET Retrieve all of the documents attached to an account.
[
{
"id": 60,
"account_id": 3,
"filename": "faq.png",
"type": "image\/png",
"size": 265420,
"storage_key": "71be44f646d46af5023ec9dd21b732b4",
"created_at": "2013-05-07 16:04:45",
"updated_at": "2013-05-07 16:04:45"
}
]
/account/{id}/document/{id}/download
GET Download a document.
/account/{id}/document
POST Upload a document to the given account.
The document should be attached to the POST as a file named document
. You may optionally include a POST field named tags
. When included, the tags
field should be a JSON encoded list of tags.
/ticket/{id}/attachment/{attachment_id}/download
GET Download an attachment.
/account/{id}/wall
GET Read the latest 25 posts from the team wall. You pass a wall post ID in the query string to "paginate" results:
`GET /account/{id}/wall?after=405
/account/{id}/wall
POST {
"content": "Post Content",
"type": "post",
"ticket": null,
"note": null,
"tags": ["foo", "bar"]
}
/account/{id}/wall/{post_id}
DELETE Delete a wall post.
/account/{id}/wall/{post_id}/comment
POST Comment on wall post. The comment content should be in a POST field named "content".
/account/{id}/wall/{post_id}/comment/{comment_id}
DELETE Delete a wall post comment.
/account/{id}/wall/{post_id}/like
POST Like a given wall post.
/account/{id}/wall/{post_id}/like
DELETE Unlike a given wall post.
Searching FAQs
/account/{id}/faqs/search?query=search&page=1
GET {
"meta":{
"total":2,
"page":1
},
"data":[
{
"id":2,
"account_id":1,
"question":"Pricing and use of multiple accounts",
"answer":"Snappy allows you to have multiple distinct accounts...",
"created_at":"2014-07-21 20:22:12",
"updated_at":"2014-07-21 20:22:12",
"active":1
},
{
"id":1,
"account_id":1,
"question":"How do I use the custom contact lookup application?",
"answer":"The custom contact application allows you to load...",
"created_at":"2014-07-21 20:22:12",
"updated_at":"2014-07-21 20:22:12",
"active":1
}
]
}
Creating And Editing FAQs
/account/{id}/faqs
GET Get all of the FAQs for an account.
/account/{id}/faqs
POST Create a new FAQ.
Request:
{
"title": "My FAQ",
"url": "faq"
}
/account/{id}/faqs/{faq_id}
PUT Update an FAQ.
Request:
{
"title": "My FAQ",
"url": "faq"
}
/account/{id}/faqs/{faq_id}
DELETE Delete an FAQ.
Creating And Editing FAQ Topics
/account/{id}/faqs/{faq_id}/topics
GET Get all of the topics for an FAQ.
/account/{id}/faqs/{faq_id}/topics
POST Create a new FAQ topic.
Request:
{
"topic": "My topic name."
}
/account/{id}/faqs/{faq_id}/topics/{topic_id}
PUT Update an FAQ topic.
Request:
{
"topic": "My topic name."
}
/account/{id}/faqs/{faq_id}/topics/{topic_id}
DELETE Delete an FAQ topic.
Creating And Editing FAQ Questions
/account/{id}/faqs/{faq_id}/topics/{topic_id}/questions
GET Get all of the questions for a given topic.
/account/{id}/faqs/{faq_id}/topics/{topic_id}/questions
POST Create a new question for a topic.
{
"question": "My question.",
"answer": "My answer."
}
/account/{id}/faqs/{faq_id}/topics/{topic_id}/questions/{question_id}
PUT Update a question.
{
"question": "My question.",
"answer": "My answer."
}
/account/{id}/faqs/{faq_id}/topics/{topic_id}/questions/{question_id}/topics
PUT Update the topics a question is attached to.
{
"topics": [1, 2, 3]
}
/account/{id}/faqs/{faq_id}/topics/{topic_id}/questions/{question_id}
DELETE Delete a question.