Zeega API

nickkapur edited this page Jun 12, 2013 · 32 revisions

Last updated 2013-01-23

API Endpoints

Items API

Methods

    <tr>
        <td>/items/parser</td>
        <td>GET</td>
        <td>Extract items from a URL</td>
        <td>-</td>
    </tr>
    <tr>
        <td colspan=3></td>
    </tr>
    <tr>
        <td><a href="#post-item">/items</a></td>
        <td>POST</td>
        <td>Create a new item</td>
        <td>Required - API key</td>
    </tr>

    <tr>
        <td><a href="#put-item">/items/:id</a></td>
        <td>PUT</td>
        <td>Update a single item</td>
        <td>Required - API key</td>
    </tr>
    <tr>
        <td colspan=3></td>
    </tr>
    <tr>
        <td><a href="#delete-item">/items/:id</a></td>
        <td>DELETE</td>
        <td>Delete a single item</td>
        <td>Required - API key</td>
    </tr>
    <tr>
        <td><a href="#delete-item-item">/items/:collection_id/items/:id/items</a></td>
        <td>DELETE</td>
        <td>Delete items from a collection</td>
        <td>Required - API key</td>
    </tr>
</tbody>  
Name Method(s) Description Authentication
/items GET List public items -
/items/:id GET Get a single item -
/items/:id/items GET Get items from a collection -
/items/search GET Search for items -
/items/:id/items/rejected GET Get rejected items -
/items/:id/items/unmoderated GET Get unmoderated items -

Item types

Item Media type Layer type
Collection (static) Collection Collection
Collection (dynamic) Collection Dynamic
Video(YouTube) Video Youtube
Video (MP4) Video Video
Image Image Image
Audio (MP3) Audio Audio
News Article Article News
News Article Link Article Bookmark
Project (published) project project

Item Structure

Name Required? Type Description
id No. Auto-generated by the database engine integer Item id
user_id Yes integer Id of the Zeega user that added the item to the database
title No string The title of the item
description No string. Max size 500 characters. The description of the item
text No string Text
uri Yes string. Max size 500 characters. Uri of the item. Used for display and playback. E.g. Flickr photo uri
attribution_uri Yes string. Max size 500 characters. Uri of the item. Used as reference to the original media source. E.g. Flickr photo attribution uri
date_created Yes datetime Date when the Item was added to the database
date_updated Yes datetime Date when the Item was last updated on the database
archive Yes string. Max size 50 characters. Archive to where Item belongs. E.g. Flickr, Reischauer Institute, Youtube, Collection
media_type Yes string. Max size 20 characters. Media type of the item. Currently the following types exist Video, Audio, Text, Image, Tweet, Document, Website
layer_type Yes string. Max size 20 characters. Layer type of the item.
thumbnail_url No string. Max size 500 characters. Uri to the item's thumbnail
child_items_count Yes integer Number of child items. If the item is a collection this field will have the number of items in it.
media_geo_latitude No float Item's latitude. Currently using the EPSG:4326 projection.
media_geo_longitude No float Item's longitude. Currently using the EPSG:4326 projection.
location No string. Max size 100 characters. Item's location name (e.g. city name, street name)
media_date_created No datetime Date when item was created on the source. E.g. date extracted from the Flickr API response when adding a photo.
media_creator_username Yes string. Max size 80 characters. Username at the media source of the user that created the item.
E.g. twitter handle
media_creator_realname No string. Max size 80 characters. Real name at the media source of the user that created the item.
E.g. twitter display name
license No string. Max size 50 characters. Media licence
attributes No JSON array Array of weakly typed attributes
tags No JSON array Array of tags
enabled Yes Boolean Used to delete items; if 1 the item is active, if 0 the item is considered deleted.
indexed No Boolean Used for indexing with SOLR. Deprecated and should be ignored.
geo_latlng No PostGIS POINT Used in Postgres and PostGIS only. Used to geolocate items in Geoserver.

Return to the index

Show Items

Returns the most recent 100 items.

GET /api/items

####URL Parameters

Optional

  • page :: Integer : Page number : with page > 0
  • limit :: Integer : Number of items per page : 500 > limit > 0 : default 100

####Success Response

  • Code: 200
  • Content
```
{
"items": [
     {
        "id": "58150",
        "user_id": 8,
        "username": "",
        "display_name": "Luís Filipe Brandão",
        "title": "sunn o))))",
        "description": "",
        "text": "",
        "uri": "http://distilleryimage5.s3.amazonaws.com/146b68e2f71e11e183e822000a1e8815_7.jpg",
        "attribution_uri": "http://instagr.am/p/PLr_DyowSd/",
        "date_created": "2012-11-15 21:53:45",
        "media_type": "Image",
        "layer_type": "Image",
        "archive": "Instagram",
        "thumbnail_url": "http://static.zeega.org/community/items/ba/d6/bad6eb32914adf1135990820d939025d.jpg",
        "media_geo_latitude": 42.342681124,
        "media_geo_longitude": -71.122602368,
        "media_date_created": "2012-09-05 05:53:56",
        "media_creator_username": "luisbrandao",
        "media_creator_realname": "Luís Brandão",
        "child_items_count": 0,
        "attributes": [],
        "child_items": [],
        "tags": [],
        "editable": false,
        "published": true,
        "enabled": true
    },
    { 
        [more items]
    },  
    "request": {
        "query": {
            "sort": "date-desc",
            "limit": 100,
            "enabled": 1,
            "result_type": "plain",
            "page": 0
   },
   returned_items_count: 100,
   items_count: 62382
},

```

####Error Response

  • Code: 401 UNAUTHORIZED - { "code": 401, "message" : "The request requires user authentication" }

  • Code: 422 UNPROCESSABLE ENTRY - { "code": 401, "message" : "Unprocessable Entity" }

  • Code: 500 INTERNAL SERVER ERROR - { "code": 500, "message" : "Internal Server Error" }

####Sample Call

javascript 
   $.ajax({
     url: "http://alpha.zeega.org/api/items",
     dataType: "json",
     type : "GET",
     success : function(r) {
       console.log(r);
     }
});

Return to the index

## Show Item

Returns JSON data about a single item.

GET /api/items/:id

####URL Parameters

Required

  • id :: Integer : Item id

Optional

  • result_type :: String : If the item is a collection and has child items, setting this parameter with the value recursive returns the collection items.

####Success Response

  • Code: 200
    Content:

    {
    "items": [
       {
           "id": "55378",
           "user_id": 1311,
           "username": "",
           "display_name": "Austin Music Map",
           "title": "Minor Mishap",
           "description": "",
           "text": "",
           "uri": "default",
           "attribution_uri": "default",
           "date_created": "2012-11-07 23:45:46",
           "media_type": "Collection",
           "layer_type": "Dynamic",
           "archive": "default",
           "thumbnail_url": "http://static.zeega.org/community/items/21/d6/21d6e20c4815951a950df8bf2a14382e.jpg",
           "media_geo_latitude": null,
           "media_geo_longitude": null,
           "media_date_created": "2012-12-10 17:01:36",
           "media_creator_username": "austinmusicmap@gmail.com",
           "media_creator_realname": "Austin Music Map",
           "child_items_count": 0,
           "attributes": {
               "tags": "minormishap"
           },
           "child_items": [],
           "tags": [
               "playlist"
           ],
           "editable": false,
           "published": true,
           "enabled": true
       }
    ],
    "request": {}
    }
    

####Error Response

  • Code: 401 UNAUTHORIZED - { "code": 401, "message" : "The request requires user authentication" }

  • Code: 422 UNPROCESSABLE ENTRY - { "code": 401, "message" : "Unprocessable Entity" }

  • Code: 500 INTERNAL SERVER ERROR - { "code": 500, "message" : "Internal Server Error" }

####Sample Call

javascript 
   $.ajax({
     url: "http://alpha.zeega.org/api/items/58150",
     dataType: "json",
     type : "GET",
     success : function(r) {
       console.log(r);
     }
});

Return to the index

## Show Items from a Collection

Returns JSON data about the child items of a single item

GET /api/items/:id/items

####URL Parameters

Required

  • id :: Integer : Item id

####Success Response

  • Code: 200
    Content:
   {
        "items": [
        {
            "id": "52648",
            "user_id": 1311,
            "username": "",
            "display_name": "Austin Music Map",
            "title": "Ready for the parade",
            "description": "",
            "text": "",
            "uri": "http://farm8.staticflickr.com/7057/6979625226_b44ff460ce_b.jpg",
            "attribution_uri": "http://www.flickr.com/photos/84075017@N00/6979625226",
            "date_created": "2012-10-30 21:50:44",
            "media_type": "Image",
            "layer_type": "Image",
            "archive": "Flickr",
            "thumbnail_url": "http://static.zeega.org/community/items/ab/55/ab55505af4d39f2d255cdb1db624cb1d.png",
            "media_geo_latitude": 30.295795,
            "media_geo_longitude": -97.74143,
            "media_date_created": "2012-03-29 12:00:00",
            "media_creator_username": "zeiss66super",
            "media_creator_realname": "zeiss66super",
            "child_items_count": 0,
            "attributes": [],
            "child_items": [],
            "tags": [
                "people",
                "film",
                "austinmusicmap"
            ],
            "editable": false,
            "published": true,
            "enabled": true
        }
  ],
  "request": {
        "query": {
            "tags": "minormishap",
            "limit": 100,
            "enabled": 1,
            "result_type": "plain",
            "page": 0
        }
  },
  "returned_items_count": 9,
  "items_count": 9 

####Error Response

  • Code: 401 UNAUTHORIZED - { "code": 401, "message" : "The request requires user authentication" }

  • Code: 422 UNPROCESSABLE ENTRY - { "code": 401, "message" : "Unprocessable Entity" }

  • Code: 500 INTERNAL SERVER ERROR - { "code": 500, "message" : "Internal Server Error" }

####Sample Call

javascript 
   $.ajax({
     url: "http://alpha.zeega.org/api/items/55378/items",
     dataType: "json",
     type : "GET",
     success : function(r) {
       console.log(r);
     }
});

Return to the index

## Search for Items

Returns JSON data about the items that match a given query.

GET /api/items/search

####Search operators and query format

The q, fields and type support boolean queries as follows:

  • Negation :: -word
  • AND queries :: zeega AND video
  • OR queries :: zeega OR video

####URL Parameters

Optional

  • q :: String : Query string
  • sort :: String : One of the following values: date-desc, date-asc, relevance or id
  • id :: Integer : Item id
  • fields :: Comma-separated list of fields : fields to return in the response. Defaults to all.
  • type :: String : Media types to include in the response
  • user :: Integer : User id : with user >=-1; if user == -1 defaults to the logged user
  • media_after :: time-stamp : Item date at the source larger the time-stamp date
  • media_before :: time-stamp : Item date at the source smaller the time-stamp date
  • after :: time-stamp : Item imported to Zeega after the time-stamp date
  • before :: time-stamp : Item imported to Zeega before the time-stamp date

####Sample queries

  • Search for audio files that have the word austin:

    • GET api/items/search?type=Image&q=austin
  • Search for items that have the word austin but exclude images and videos:

    • GET api/items/search?type=-Image AND -Video&q=austin
  • Search for items that belong to the user 1311 and have the word austin but exclude images and videos:

    • GET api/items/search?type=-Image AND -Video&q=austin&user=1311

####Success Response

  • Code: 200
    Content:
   {
		request: {
			query: {
				type: "Image",
				text: "austin",
				limit: 1,
				enabled: 1,
				result_type: "plain",
				page: 0
			}
		},
		items: [
			{
				id: 40352,
				user_id: 360,
				username: "anniepalone@gmail.com",
				display_name: "Annie Palone",
				title: "Art Night Austin 2012",
				description: "",
				text: "",
				uri: "http://farm8.staticflickr.com/7196/6957252981_4fda918cf0_b.jpg",
				attribution_uri: "http://www.flickr.com/photos/49342552@N02/6957252981/",
				date_created: "2012-06-29 13:00:42",
				media_type: "Image",
				layer_type: "Image",
				archive: "Flickr",
				thumbnail_url: "http://farm8.staticflickr.com/7196/6957252981_4fda918cf0_s.jpg",
				media_geo_latitude: null,
				media_geo_longitude: null,
				media_date_created: "2013-01-24 16:05:52",
				media_creator_username: "Art Alliance Austin",
				media_creator_realname: null,
				child_items_count: 0,
				attributes: "N;",
				child_items: [ ],
				tags: [ ],
				editable: false,
				published: true,
				enabled: true
			}
		],
		returned_items_count: 1,
		items_count: 1256
	}

####Error Response

  • Code: 401 UNAUTHORIZED - { "code": 401, "message" : "The request requires user authentication" }

  • Code: 422 UNPROCESSABLE ENTRY - { "code": 401, "message" : "Unprocessable Entity" }

  • Code: 500 INTERNAL SERVER ERROR - { "code": 500, "message" : "Internal Server Error" }

####Sample Call

javascript 
   $.ajax({
     url: "http://alpha.zeega.org/api/items/search",
     dataType: "json",
     type : "GET",
     success : function(r) {
       console.log(r);
     }
});

Return to the index

## Create a new Item

Creates a new Item

POST /api/items

####URL Parameters

  • api_key :: String : Query string

####Data Parameters

Name Required? Type Description
title No string. Max size is 255. The title of the item
description No string. Max size is 500. The description of the item
uri Yes string. Max size 500 characters. Uri of the item. Used for display and playback. E.g. Flickr photo uri
attribution_uri Yes string. Max size 500 characters. Uri of the item. Used as reference to the original media source. E.g. Flickr photo attribution uri
archive Yes string. Max size 50 characters. Archive to where Item belongs. E.g. Flickr, Reischauer Institute, Youtube, Collection
media_type Yes string. Max size 20 characters. Media type of the item. See the "Media and Layer types" section on the data schema documentation
layer_type Yes string. Max size 20 characters. Layer type of the item. See the "Media and Layer types" section on the data schema documentation
thumbnail_url No string. Max size 500 characters. Uri to the item's thumbnail
child_items_count Yes integer Number of child items. If the item is a collection this field will have the number of items in it.
media_geo_latitude No float Item's latitude. Currently using the EPSG:4326 projection.
media_geo_longitude No float Item's longitude. Currently using the EPSG:4326 projection.
location No string. Max size 100 characters. Item's location name (e.g. city name, street name)
media_date_created No datetime Date when item was created on the source. E.g. date extracted from the Flickr API response when adding a photo.
media_date_created_end No datetime Complimentary to the media_date_created field for items that don't have a creation date but have a time interval.
media_creator_username Yes string. Max size 80 characters. Username at the media source of the user that created the item.
E.g. twitter handle
media_creator_realname No string. Max size 80 characters. Real name at the media source of the user that created the item.
E.g. twitter display name
license No string. Max size 50 characters. Real name at the media source of the user that created the item.
E.g. twitter display name
attributes No JSON array Array of weakly typed attributes
tags No JSON array Array of tags
published Yes integer 0 - private; 1 - approved; 2 - public. Default is 1.

####Success Response

  • Code: 200
    Content:
   {
        "items": [
        {
            "id": "52648",
            "user_id": 1311,
            "username": "",
            "display_name": "Austin Music Map",
            "title": "Ready for the parade",
            "description": "",
            "text": "",
            "uri": "http://farm8.staticflickr.com/7057/6979625226_b44ff460ce_b.jpg",
            "attribution_uri": "http://www.flickr.com/photos/84075017@N00/6979625226",
            "date_created": "2012-10-30 21:50:44",
            "media_type": "Image",
            "layer_type": "Image",
            "archive": "Flickr",
            "thumbnail_url": "http://static.zeega.org/community/items/ab/55/ab55505af4d39f2d255cdb1db624cb1d.png",
            "media_geo_latitude": 30.295795,
            "media_geo_longitude": -97.74143,
            "media_date_created": "2012-03-29 12:00:00",
            "media_creator_username": "zeiss66super",
            "media_creator_realname": "zeiss66super",
            "child_items_count": 0,
            "attributes": [],
            "child_items": [],
            "tags": [
                "people",
                "film",
                "austinmusicmap"
            ],
            "editable": false,
            "published": true,
            "enabled": true
        }
  ],
  "request": {
  }

####Error Response

  • Code: 401 UNAUTHORIZED - { "code": 401, "message" : "The request requires user authentication" }

  • Code: 422 UNPROCESSABLE ENTRY - { "code": 401, "message" : "Unprocessable Entity" }

  • Code: 500 INTERNAL SERVER ERROR - { "code": 500, "message" : "Internal Server Error" }

Return to the index

## Update a single item

Update an item. You can only update items that belong to you.

PUT /api/items/:id

####URL Parameters

Required

  • id :: Integer : Item id
  • api_key :: String : API key for authentication and authorization

####Data Parameters

Same as the POST method

####Success Response

  • Code: 200
    Content:
{
     "items": [
     {
         "id": "52648",
         "user_id": 1311,
         "username": "",
         "display_name": "Austin Music Map",
         "title": "Ready for the parade",
         "description": "",
         "text": "",
         "uri": "http://farm8.staticflickr.com/7057/6979625226_b44ff460ce_b.jpg",
         "attribution_uri": "http://www.flickr.com/photos/84075017@N00/6979625226",
         "date_created": "2012-10-30 21:50:44",
         "media_type": "Image",
         "layer_type": "Image",
         "archive": "Flickr",
         "thumbnail_url": "http://static.zeega.org/community/items/ab/55/ab55505af4d39f2d255cdb1db624cb1d.png",
         "media_geo_latitude": 30.295795,
         "media_geo_longitude": -97.74143,
         "media_date_created": "2012-03-29 12:00:00",
         "media_creator_username": "zeiss66super",
         "media_creator_realname": "zeiss66super",
         "child_items_count": 0,
         "attributes": [],
         "child_items": [],
         "tags": [
             "people",
             "film",
             "austinmusicmap"
         ],
         "editable": false,
         "published": true,
         "enabled": true
     }
],
"request": {
}

####Error Response

  • Code: 401 UNAUTHORIZED - { "code": 401, "message" : "The request requires user authentication" }

  • Code: 422 UNPROCESSABLE ENTRY - { "code": 401, "message" : "Unprocessable Entity" }

  • Code: 500 INTERNAL SERVER ERROR - { "code": 500, "message" : "Internal Server Error" }

Return to the index

## Delete an Item

Deletes an item. You can only delete items that belong to you.

DELETE /api/items/:id

####URL Parameters

Required

  • id :: Integer : Item id
  • api_key :: String : API key for authentication and authorization

####Success Response

  • Code: 200 SUCCESS - { "code": 200, "message" : "Success" }

####Error Response

  • Code: 400 BAD REQUEST - { "code": 401, "message" : "The item with the id :id does not exist" }

  • Code: 401 UNAUTHORIZED - { "code": 401, "message" : "The request requires user authentication" }

  • Code: 422 UNPROCESSABLE ENTRY - { "code": 401, "message" : "The id parameter is mandatory and must be an integer" }

  • Code: 422 UNPROCESSABLE ENTRY - { "code": 401, "message" : "Unprocessable Entity" }

  • Code: 500 INTERNAL SERVER ERROR - { "code": 500, "message" : "Internal Server Error" }

Return to the index

## Delete an Item from a Collection

Deletes an item from a collection. You can only delete items that belong to you.

DELETE /api/items/:collection_id/items/:id/items

####URL Parameters

Required

  • id :: Integer : Item id
  • collection_id :: Integer : Collection id
  • api_key :: String : API key for authentication and authorization

####Success Response

  • Code: 200 SUCCESS - { "code": 200, "message" : "Success" }

####Error Response

  • Code: 400 BAD REQUEST - { "code": 401, "message" : "The item with the id :id does not exist" }

  • Code: 401 UNAUTHORIZED - { "code": 401, "message" : "The request requires user authentication" }

  • Code: 403 FORBIDDEN - { "code": 403, "message" : "Forbidden" }

  • Code: 422 UNPROCESSABLE ENTRY - { "code": 401, "message" : "The id parameter is mandatory and must be an integer" }

  • Code: 422 UNPROCESSABLE ENTRY - { "code": 401, "message" : "The child item id parameter is mandatory and must be an integer" }

  • Code: 422 UNPROCESSABLE ENTRY - { "code": 401, "message" : "Unprocessable Entity" }

  • Code: 500 INTERNAL SERVER ERROR - { "code": 500, "message" : "Internal Server Error" }

Return to the index

# Projects API

Methods

Name Method(s) Description
/projects/:id GET Get a project
/projects POST Create a new project

## Create a new Project

Creates a new Project

POST /api/projects

Project Structure

A Project is a set is a set of Sequences. A Sequence is a linear orderings of Frames. Frames are the basic building blocks of Zeegas and can have multiple layers. Layers are instances of items within a frame. For example, in the Zeega Editor, an item can be dragged onto a frame to create a new layer containing that item.

Project +0 --- 0+ Sequences +0 --- 0+ Frames +0 --- 0+ Layers

The base JSON structure for a project is the following:

{
	id: 3811,
	user_id: 8,
	title: "Untitled Project",
	date_created: "12/10/2012",
	date_updated: "12/10/2012",
	date_published: "",
	tags: "",
	authors: "Luís Filipe Brandão",
	enabled: true,
	estimated_time: "",
	description: "",
	location: "",
	item_id: null,
	published: false,
	cover_image: "",
	sequences: [],
	frames: [],
	layers: []
}

The same JSON response with a Sequence that contains three Frames, with a sound Layer on which Frame and an Image as a persistent Layer is the following:

{
    "id": 3811,
    "user_id": 8,
    "title": "Untitled Project",
    "date_created": "12/10/2012 ",
    "date_updated": "1355166122",
    "date_published": "",
    "tags": "",
    "authors": "Luís Filipe Brandão",
    "enabled": true,
    "estimated_time": "Some time",
    "description": "",
    "location": "",
    "item_id": null,
    "published": false,
    "cover_image": "",
    "sequences": [
        {
            "id": 6760,
            "title": "Intro Sequence",
            "attr": [],
            "persistent_layers": [
                66836
            ],
            "frames": [
                27887,
                27890,
                27891
            ]
        }
    ],
    "frames": [
        {
            "id": 27887,
            "attr": {
                "advance": 0
            },
            "thumbnail_url": "http://static.zeega.org/community/frames/0/27887/croppedThumb_szis8KHU.jpg",
            "layers": [
                66836,
                66845
            ]
        },
        {
            "id": 27890,
            "attr": {
                "advance": 0
            },
            "thumbnail_url": "http://static.zeega.org/community/frames/0/27890/croppedThumb_ynCZcoAO.jpg",
            "layers": [
                66836,
                66837
            ]
        },
        {
            "id": 27891,
            "attr": {
                "advance": 0
            },
            "thumbnail_url": "http://static.zeega.org/community/frames/0/27891/croppedThumb_Vv7a9nTl.jpg",
            "layers": [
                66836,
                66838
            ]
        }
    ],
    "layers": [
        {
            "id": 66836,
            "type": "Audio",
            "project_id": "3811",
            "attr": {
                "title": "Elsa: Ceramic Bunny Artisan in Oaxaca",
                "user_id": 8,
                "description": "Santa Maria Tavehua is a tiny village in the hillsides of southern Mexico.  They are known for their ceramic arts made from an indigenous orange clay.  Sonic Trace follows one figurine, a trombone-playing rabbit, from the hands of her creator in the highlands of Oaxaca, into the global marketplace.",
                "text": "",
                "uri": "http://api.soundcloud.com/tracks/61292707/stream?consumer_key=lyCI2ejeGofrnVyfMI18VQ",
                "attribution_uri": "http://soundcloud.com/kcrw/elsa-ceramic-bunny-artisan-in",
                "date_created": {
                    "date": "2012-12-10 18:59:45",
                    "timezone_type": 3,
                    "timezone": "UTC"
                },
                "date_updated": {
                    "date": "2012-12-10 18:59:45",
                    "timezone_type": 3,
                    "timezone": "UTC"
                },
                "archive": "SoundCloud",
                "media_type": "Audio",
                "layer_type": "Audio",
                "thumbnail_url": "http://static.zeega.org/community/items/dc/a0/dca0324c0440b40ea68d4f8764477046.png",
                "child_items_count": 0,
                "media_geo_latitude": null,
                "media_geo_longitude": null,
                "location": null,
                "media_date_created": {
                    "date": "2012-09-26 10:34:45",
                    "timezone_type": 3,
                    "timezone": "UTC"
                },
                "media_date_created_end": null,
                "media_creator_username": "KCRW",
                "media_creator_realname": "KCRW",
                "license": null,
                "attributes": [],
                "tags": [
                    "mexico",
                    "art",
                    "crafts",
                    "ceramics",
                    "oaxaca",
                    "\"sonic",
                    "trace\"",
                    "kcrw"
                ],
                "id_at_source": null,
                "enabled": true,
                "published": false,
                "geo_latlng": null,
                "ingested_by": null,
                "duration": null,
                "url": "none",
                "left": 0,
                "top": 0,
                "height": 100,
                "width": 100,
                "volume": 0.5,
                "cue_in": 0,
                "cue_out": null,
                "fade_in": 0,
                "fade_out": 0,
                "opacity": 1,
                "dimension": 1.5,
                "citation": true,
                "model": null,
                "control_mode": "editor",
                "media_target": "#layer-visual-66836",
                "controls_target": "#media-controls-66836",
                "control_fade": true,
                "autoplay": false,
                "id": 66836,
                "persistent": 1
            }
        },
        {
            "id": 66837,
            "type": "Audio",
            "project_id": "3811",
            "attr": {
                "title": "Jocelynda: First in her family to go to College (from Sonic Trace)",
                "user_id": 8,
                "description": "Sonic Trace is exploring the connection between Santa Maria Tavehua, a tiny village in the hillsides of southern Mexico, and L.A.’s Koreatown – where more than half the village now lives.\r\n\r\nThis is a story is about putting down roots. We hear from 17-year old Jocelynda Salvador. She was born and raised in \"K-town\"—but to her, it is “little Oaxaca.\" This year she became the first in her family to go to college. She kept an audio diary of her first month there. ",
                "text": "",
                "uri": "http://api.soundcloud.com/tracks/61184101/stream?consumer_key=lyCI2ejeGofrnVyfMI18VQ",
                "attribution_uri": "http://soundcloud.com/kcrw/jocelynda-first-in-her-family",
                "date_created": {
                    "date": "2012-12-10 18:59:34",
                    "timezone_type": 3,
                    "timezone": "UTC"
                },
                "date_updated": {
                    "date": "2012-12-10 18:59:34",
                    "timezone_type": 3,
                    "timezone": "UTC"
                },
                "archive": "SoundCloud",
                "media_type": "Audio",
                "layer_type": "Audio",
                "thumbnail_url": "http://static.zeega.org/community/items/23/dd/23dde2c85d3e73e801e4aa0f28afa147.png",
                "child_items_count": 0,
                "media_geo_latitude": null,
                "media_geo_longitude": null,
                "location": null,
                "media_date_created": {
                    "date": "2012-09-26 01:05:02",
                    "timezone_type": 3,
                    "timezone": "UTC"
                },
                "media_date_created_end": null,
                "media_creator_username": "KCRW",
                "media_creator_realname": "KCRW",
                "license": null,
                "attributes": [],
                "tags": [
                    "\"sonic",
                    "trace\"",
                    "kcrw",
                    "immigration",
                    "zapotec",
                    "oaxaca",
                    "indigenous",
                    "mexico",
                    "koreatown",
                    "\"dream",
                    "act\""
                ],
                "id_at_source": null,
                "enabled": true,
                "published": false,
                "geo_latlng": null,
                "ingested_by": null,
                "duration": null,
                "url": "none",
                "left": 0,
                "top": 0,
                "height": 100,
                "width": 100,
                "volume": 0.5,
                "cue_in": 0,
                "cue_out": null,
                "fade_in": 0,
                "fade_out": 0,
                "opacity": 1,
                "dimension": 1.5,
                "citation": true,
                "model": null,
                "control_mode": "editor",
                "media_target": "#layer-visual-undefined",
                "controls_target": "#media-controls-undefined",
                "control_fade": true,
                "autoplay": false
            }
        },
        {
            "id": 66838,
            "type": "Audio",
            "project_id": "3811",
            "attr": {
                "title": "Día de Los Muertos ... Day of the Dead",
                "user_id": 8,
                "description": "Today is the Day of the Dead, el Día de Los Muertos. It is a Mexican national holiday. The belief is that on this day, the dead come back to visit the living. KCRW's Anayansi Diaz-Cortes grew up in the US, but is from Mexico City. In this story, we go home with her to discover what this celebration of the dead, tells us about the living.\n\nThis story was originally produced for KCRW in Los Angeles by Anayansi Diaz-Cortes and Eric Pearse Chavez with help from Ronny Mikkelson (http://www.organiclou",
                "text": "",
                "uri": "http://api.soundcloud.com/tracks/65881652/stream?consumer_key=lyCI2ejeGofrnVyfMI18VQ",
                "attribution_uri": "http://soundcloud.com/kcrw/d-a-de-los-muertos-day-of-the",
                "date_created": {
                    "date": "2012-12-10 18:59:18",
                    "timezone_type": 3,
                    "timezone": "UTC"
                },
                "date_updated": {
                    "date": "2012-12-10 18:59:18",
                    "timezone_type": 3,
                    "timezone": "UTC"
                },
                "archive": "SoundCloud",
                "media_type": "Audio",
                "layer_type": "Audio",
                "thumbnail_url": "http://static.zeega.org/community/items/3b/2d/3b2d0a4896a16a33eb65655643995dce.png",
                "child_items_count": 0,
                "media_geo_latitude": null,
                "media_geo_longitude": null,
                "location": null,
                "media_date_created": {
                    "date": "2012-11-02 09:23:32",
                    "timezone_type": 3,
                    "timezone": "UTC"
                },
                "media_date_created_end": null,
                "media_creator_username": "KCRW",
                "media_creator_realname": "KCRW",
                "license": null,
                "attributes": [],
                "tags": [
                    "\"dia",
                    "de",
                    "los",
                    "muertos\"",
                    "\"day",
                    "of",
                    "the",
                    "dead\"",
                    "\"sonic",
                    "trace\"",
                    "\"feria",
                    "del",
                    "alfeñique\"",
                    "\"hollywood",
                    "cemetery\"",
                    "mexico"
                ],
                "id_at_source": null,
                "enabled": true,
                "published": false,
                "geo_latlng": null,
                "ingested_by": null,
                "duration": null,
                "url": "none",
                "left": 0,
                "top": 0,
                "height": 100,
                "width": 100,
                "volume": 0.5,
                "cue_in": 0,
                "cue_out": null,
                "fade_in": 0,
                "fade_out": 0,
                "opacity": 1,
                "dimension": 1.5,
                "citation": true,
                "model": null,
                "control_mode": "editor",
                "media_target": "#layer-visual-undefined",
                "controls_target": "#media-controls-undefined",
                "control_fade": true,
                "autoplay": false
            }
        },
        {
            "id": 66845,
            "type": "Image",
            "project_id": "3811",
            "attr": {
                "title": "photo(44",
                "id": "68973",
                "user_id": 8,
                "description": "",
                "text": "",
                "uri": "http://farm9.staticflickr.com/8482/8183964901_cd2b8f5c56_b.jpg",
                "attribution_uri": "http://www.flickr.com/photos/82721330@N02/8183964901/",
                "date_created": {
                    "date": "2012-12-10 19:01:56",
                    "timezone_type": 3,
                    "timezone": "UTC"
                },
                "date_updated": {
                    "date": "2012-12-10 19:01:56",
                    "timezone_type": 3,
                    "timezone": "UTC"
                },
                "archive": "Flickr",
                "media_type": "Image",
                "layer_type": "Image",
                "thumbnail_url": "http://static.zeega.org/community/items/74/84/7484e007dcba0e72580c7a0901b90c8d.png",
                "child_items_count": 0,
                "media_geo_latitude": null,
                "media_geo_longitude": null,
                "location": null,
                "media_date_created": {
                    "date": "2012-04-30 12:49:09",
                    "timezone_type": 3,
                    "timezone": "UTC"
                },
                "media_date_created_end": null,
                "media_creator_username": "Sonic Trace",
                "media_creator_realname": "Sonic Trace",
                "license": null,
                "attributes": [],
                "tags": [],
                "id_at_source": null,
                "enabled": true,
                "published": false,
                "geo_latlng": null,
                "ingested_by": null,
                "duration": null,
                "url": "none",
                "left": 0,
                "top": 0,
                "height": 100,
                "width": 100,
                "opacity": 1,
                "aspect": 1.33,
                "citation": true
            }
        }
    ]
}