├── CHANGELOG.md ├── README.md ├── api.md ├── assets ├── byte-1.jpeg ├── byte-2.jpeg ├── byte-3.jpeg └── byte-4.jpeg ├── bff.md ├── objects.md └── resources ├── Fonts ├── book │ └── st32k │ │ ├── FONTLOG.txt │ │ └── st32k.ttf ├── cursive │ └── leaguescript │ │ ├── DESCRIPTION.en_us.html │ │ ├── LeagueScript.ttf │ │ ├── METADATA.json │ │ └── OFL.txt ├── eightbit │ └── PixelGrotesk-Regular.ttf ├── mono │ ├── DESCRIPTION.en_us.html │ ├── LICENSE.txt │ ├── METADATA.json │ └── RobotoMono-Regular.ttf ├── poster │ └── pressuru.otf ├── punchout │ └── Labeler-Regular.otf ├── sans │ └── aileron │ │ ├── Aileron-Black.otf │ │ ├── Aileron-BlackItalic.otf │ │ ├── Aileron-Bold.otf │ │ ├── Aileron-BoldItalic.otf │ │ ├── Aileron-Heavy.otf │ │ ├── Aileron-HeavyItalic.otf │ │ ├── Aileron-Italic.otf │ │ ├── Aileron-Light.otf │ │ ├── Aileron-LightItalic.otf │ │ ├── Aileron-Regular.otf │ │ ├── Aileron-SemiBold.otf │ │ ├── Aileron-SemiBoldItalic.otf │ │ ├── Aileron-Thin.otf │ │ ├── Aileron-ThinItalic.otf │ │ ├── Aileron-UltraLight.otf │ │ └── Aileron-UltraLightItalic.otf ├── serif │ └── heuristica-otf-0.4.tar │ │ ├── FontLog.txt │ │ ├── Heuristica-Bold.otf │ │ ├── Heuristica-BoldItalic.otf │ │ ├── Heuristica-Italic.otf │ │ └── Heuristica-Regular.otf └── tape │ └── OSP_Alfphabet │ ├── Alfphabet-IV.ttf │ ├── FONTLOG.txt │ ├── OFL-1.1.txt │ ├── OFL-FAQ.txt │ └── README.txt ├── Soundfont └── Byte.sf2 └── Stickers ├── No Shadow ├── StickerBandage.png ├── StickerBeaker.png ├── StickerBomb.png ├── StickerBulb.png ├── StickerCactus.png ├── StickerCat.png ├── StickerCorndog.png ├── StickerCrab.png ├── StickerDiamond.png ├── StickerDog.png ├── StickerDonut.png ├── StickerDrop.png ├── StickerEggplant.png ├── StickerFrog.png ├── StickerHeart.png ├── StickerIce.png ├── StickerIceCream.png ├── StickerJellyfish.png ├── StickerJoystick.png ├── StickerKite.png ├── StickerLighter.png ├── StickerLightning.png ├── StickerLime.png ├── StickerMagGlass.png ├── StickerMartini.png ├── StickerMonkey.png ├── StickerPlanet.png ├── StickerPoo.png ├── StickerRainbow.png ├── StickerRibbon.png ├── StickerSalt.png ├── StickerSmiley.png ├── StickerSpray.png ├── StickerStar.png ├── StickerTea.png ├── StickerThumbsDown.png ├── StickerThumbsUp.png ├── StickerTissue.png ├── StickerTopHat.png └── StickerTurtle.png └── With Shadow ├── StickerBandage.png ├── StickerBeaker.png ├── StickerBomb.png ├── StickerBulb.png ├── StickerCactus.png ├── StickerCat.png ├── StickerCorndog.png ├── StickerCrab.png ├── StickerDiamond.png ├── StickerDog.png ├── StickerDonut.png ├── StickerDrop.png ├── StickerEggplant.png ├── StickerFrog.png ├── StickerHeart.png ├── StickerIce.png ├── StickerIceCream.png ├── StickerJellyfish.png ├── StickerJoystick.png ├── StickerKite.png ├── StickerLighter.png ├── StickerLightning.png ├── StickerLime.png ├── StickerMagGlass.png ├── StickerMartini.png ├── StickerMonkey.png ├── StickerPlanet.png ├── StickerPoo.png ├── StickerRainbow.png ├── StickerRibbon.png ├── StickerSalt.png ├── StickerSmiley.png ├── StickerSpray.png ├── StickerStar.png ├── StickerTea.png ├── StickerThumbsDown.png ├── StickerThumbsUp.png ├── StickerTissue.png ├── StickerTopHat.png └── StickerTurtle.png /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 2 | Byte API Changelog 3 | 4 | 5 | 2015/09/22: 6 | 7 | - Add comment editing and deletion. 8 | Comment author can edit and delete their own comments. 9 | Post author can delete comments from their post. 10 | 11 | - New user info: account creation timestamp in /status and firstAuth boolean in /auth response. 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Bytehub 2 | 3 | * **[API Docs](./api.md)** 4 | * **[Byte File Format (BFF)](./bff.md)** 5 | 6 | More coming soon! 7 | 8 | #### Implementations 9 | * **[byte.js](https://github.com/bytehq/byte.js)** — A web renderer for Bytes / BFF 10 | * **[byte-music-converter](https://github.com/bytehq/byte-music-converter)** - Converts Byte Music to MIDI/WAV/MP3 11 | * **[Boogle](https://github.com/Donohue/boogle)** — Byte search engine 12 | * **[ByteSharp](https://github.com/drasticactions/ByteSharp)** — C# Byte API library 13 | * **[byte-music.js](https://github.com/audionerd/byte-music.js)** - Javascript Byte Music Player 14 | 15 | Questions, feedback, discussion, or need support? Please use our Issues page. 16 | -------------------------------------------------------------------------------- /api.md: -------------------------------------------------------------------------------- 1 | # Byte API 2 | 3 | As far as APIs go, the Byte API is a fairly straightforward affair. 4 | 5 | Before we get started, a few things of note: 6 | 7 | * The base API endpoint is `https://api.byte.co/v1/` 8 | * Always remember to use `HTTPS` for your requests 9 | * For ease of development, appending `?pretty` (or `&pretty`, if the endpoint already has a query string) to any request endpoint will return you nicely formatted JSON 10 | * For a successful request, the standard JSON response looks like the following: 11 | 12 | ```json 13 | { 14 | "data": {}, 15 | "success": 1 16 | } 17 | ``` 18 | * Similarly for a failed request: 19 | 20 | ```json 21 | { 22 | "data": {}, 23 | "success": 0, 24 | "error": { 25 | "message": "Generic User Error", 26 | "code": 1100 27 | } 28 | } 29 | ``` 30 | 31 | 32 | ### Headers 33 | To gracefully support older versions of your app (and ours!), and ensure that the BFF model can evolve safely, we need all of our clients to include a custom `User-Agent` value in addition to specifying gzip support. Follow this structure: 34 | 35 | ``` 36 | User-Agent: "gzip (companyName/typeOfApp/BFFVersion/AppVersion)" 37 | ``` 38 | 39 | So, let's pretend you work at a company called Bugle, and you made a clever web app using the Byte API that played the music of a random byte that had great tunes. You built the web app assuming that the latest BFF model version was 1.0, and you've made 3 deploys to your web app and you arbitrarily versioned it "1.3beta". You should include this string in every request as your `User-Agent`: 40 | 41 | ``` 42 | User-Agent: "gzip (Bugle/web/1.0/1.3beta)" 43 | ``` 44 | 45 | 46 | Also, use the appropriate Content-Type (`-H "Content-Type:application/json"`), Accept (`-H "Accept:application/json"`), and Accept-Encoding (`-H "Accept-Encoding: gzip"`) headers. 47 | 48 | Okay, let's dive in! 49 | 50 | 51 | 52 | ## Contents 53 | 54 | * [Authentication/Registration](#authenticationregistration) 55 | * [Users](#users) 56 | * [Names](#names) 57 | * [Posts (Consumption)](#posts-consumption) 58 | * [Comments](#comments) 59 | * [Bookmarks](#bookmarks) 60 | * [Flags](#flags) 61 | * [Activity](#activity) 62 | * [Posts (Creation)](#posts-creation) 63 | * [Computers](#computers) 64 | 65 | 66 | 67 | ## Authentication/Registration 68 | 69 | The Byte API uses [JWTs](https://jwt.io) for authentication. Upon a successful `/auth` request, we'll supply you with an authorization token. This token will allow you access to authenticated endpoints when included in an `Authorization` header: `-H "Authorization: Bearer "`. Each Byte account is tied to a specific phone number; authentication is handled by a one–time code sent via SMS to the phone number. We are in the process of offering secondary identifiers in case of loss of phone number. 70 | 71 | | Method | Endpoint | Description | 72 | | :---: | :--- | :--- | 73 | | `POST` | [`/request-code`](#post-request-code) | Sends an authentication code to the supplied phone number. | 74 | | `POST` | [`/auth`](#post-auth) | Registers or authenticates an account corresponding to the phone number. | 75 | 76 | 77 | ### **POST** `/request-code` 78 | 79 | The `POST /request-code` endpoint sends a validation code to the supplied phone number. 80 | 81 | | Parameter | Type | Description | Example | 82 | | :---: | :---: | :--- | :--- | 83 | | `phone` | String | Required. The user's phone number, preferably formatted to [E.164](https://en.wikipedia.org/wiki/E.164). | `"+11234567890"` | 84 | 85 | #### Sample Query 86 | 87 | ```bash 88 | curl -X POST -H "Content-Type:application/json" -H "Accept:application/json" https://api.byte.co/v1/request-code -d '{"phone": ""}' 89 | ``` 90 | 91 | #### Sample Response 92 | 93 | ```json 94 | { 95 | "data": {}, 96 | "success": 1 97 | } 98 | ``` 99 | This request will trigger an SMS to the supplied phone number of the form: "Byte: Enter this code 0000" 100 | 101 | #### Error States 102 | 103 | | Code | Message | 104 | | :---: | :--- | 105 | | 1107 | User permissions error | 106 | 107 | 108 | ### **POST** `/auth` 109 | 110 | The `POST /auth` endpoint is used for both registration and authentication. Users are currently limited to five simultaneous sessions. 111 | 112 | | Parameter | Type | Description | Example | 113 | | :---: | :---: | :--- | :--- | 114 | | `phone` | String | Required. The user's phone number, preferably formatted to [E.164](https://en.wikipedia.org/wiki/E.164). | `"+11234567890"` | 115 | | `code` | String | Required. The auth code sent via SMS to the supplied `phone`. | `"1234"` | 116 | | `timeZone` | String | Optional. [IANA](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) time zone. Defaults to `America/New_York`. | `"America/Toronto"` | 117 | 118 | #### Sample Query 119 | 120 | ```bash 121 | curl -X POST -H "Content-Type:application/json" -H "Accept:application/json" https://api.byte.co/v1/auth -d '{"phone": "", "code": ""}' 122 | ``` 123 | 124 | #### Sample Response 125 | 126 | ```json 127 | { 128 | "data": { 129 | "token": "", 130 | "firstAuth": true, 131 | "user": { 132 | "username":"", 133 | "description":null, 134 | "created":1439589853533, 135 | "profilePhoto":"", 136 | "createdString":"1439589853533", 137 | "timeZone":"America/New_York", 138 | "id":"" 139 | } 140 | }, 141 | "success": 1 142 | } 143 | ``` 144 | 145 | #### Error States 146 | 147 | | Code | Message | 148 | | :---: | :--- | 149 | | 1110 | Expired/invalid auth code | 150 | | 1114 | User suspended | 151 | 152 | 153 | 154 | ## Users 155 | 156 | Endpoints for looking up and managing users 157 | 158 | | Method | Endpoint | Description | 159 | | :---: | :--- | :--- | 160 | | `GET` | [`/status`](#get-status-requires-authentication-header) | Fetches the latest user state | 161 | | `GET` | [`/account`](#get-account-requires-authentication-header) | Returns the account information tied to the current session token | 162 | | `POST` | [`/account`](#post-account-requires-authentication-header) | Updates account information | 163 | | `POST` | [`/users/self/deactivate`](#post-usersselfdeactivate-requires-authentication-header) | Deactivates the current user account | 164 | | `POST` | [`/users/self/reactivate`](#post-usersselfreactivate-requires-authentication-header) | Reactivates the current user account | 165 | | `POST` | [`/account/check-name`](#post-check-name-requires-authentication-header) | Checks whether a name is available | 166 | | `GET` | [`/user/feed`](#get-user-feed-requires-authentication-header) | Fetches the user's feed | 167 | | `GET` | [`/users/recommended`](#get-users-recommended-requires-authentication-header) | Fetches the list of recommended users | 168 | | `GET` | [`/users/u/`](#get-users-u-username-requires-authentication-header) | Looks up a user's profile by username | 169 | | `GET` | [`/users/id/`](#get-users-id-userid-requires-authentication-header) | Looks up a user's profile by user id | 170 | 171 | 172 | ### **GET** `/status` (requires authentication header) 173 | 174 | The `GET /status` endpoint is a simple check to fetch the latest user state from the server. 175 | 176 | #### Sample Query 177 | 178 | ```bash 179 | curl -X GET -H "Authorization: Bearer " -H "Accept:application/json" https://api.byte.co/v1/status 180 | ``` 181 | 182 | #### Sample Response 183 | 184 | ```json 185 | { 186 | "data": { 187 | "username": "", 188 | "created": 1442932401721, 189 | "createdString": "1442932401721", 190 | "latestMessageString": "1440981197064", 191 | "latestMessage": 1440981197064, 192 | "userId": "", 193 | "messageCount": 85 194 | }, 195 | "success": 1 196 | } 197 | ``` 198 | 199 | #### Error States 200 | 201 | | Code | Message | 202 | | :---: | :--- | 203 | | 1101 | User does not exist | 204 | 205 | 206 | ### **GET** `/account` (requires authentication header) 207 | 208 | The `GET /account` endpoint returns the information for the account corresponding to the current session token. 209 | 210 | #### Sample Query 211 | 212 | ```bash 213 | curl -X GET -H "Authorization: Bearer " -H "Accept:application/json" https://api.byte.co/v1/account 214 | ``` 215 | 216 | #### Sample Response 217 | 218 | ```json 219 | { 220 | "data": { 221 | "username": "", 222 | "phoneSearchOptOut": false, 223 | "description": null, 224 | "created": 1439504708109, 225 | "createdString": "1439504708109", 226 | "devices": [ 227 | { 228 | "app_environment": "byte.ios", 229 | "token": "" 230 | } 231 | ], 232 | "timeZone": "America/Toronto", 233 | "id": "" 234 | }, 235 | "success": 1 236 | } 237 | ``` 238 | 239 | #### Error States 240 | 241 | | Code | Message | 242 | | :---: | :--- | 243 | | 1101 | User does not exist | 244 | 245 | 246 | ### **POST** `/account` (requires authentication header) 247 | 248 | The `POST /account` endpoint is used to update information for the account corresponding to the current session token. 249 | 250 | | Parameter | Type | Description | Example | 251 | | :---: | :---: | :--- | :--- | 252 | | `timeZone` | String | Optional [IANA](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) time zone. Defaults to `America/New_York`. | `"America/Toronto"` | 253 | | `description` | String | Optional. | `""` | 254 | | `profilePhoto` | String | Optional path to uploaded profile photo. | `"http://lh3.googleusercontent.com/..."` | 255 | | `username` | String | Optional username. | `"adam"` | 256 | 257 | #### Sample Query 258 | 259 | ```bash 260 | curl -X POST -H "Authorization: Bearer " -H "Content-Type:application/json" -H "Accept:application/json" https://api.byte.co/v1/account -d '{"timeZone": "America/New_York", "description": ""}' 261 | ``` 262 | 263 | #### Sample Response 264 | 265 | ```json 266 | { 267 | "data": { 268 | "username": "", 269 | "phoneSearchOptOut": false, 270 | "description": null, 271 | "created": 1439504708109, 272 | "createdString": "1439504708109", 273 | "devices": [ 274 | { 275 | "app_environment": "byte.ios", 276 | "token": "" 277 | } 278 | ], 279 | "timeZone": "America/Toronto", 280 | "id": "" 281 | }, 282 | "success": 1 283 | } 284 | ``` 285 | 286 | #### Error States 287 | 288 | | Code | Message | 289 | | :---: | :--- | 290 | | 1101 | User does not exist | 291 | 292 | 293 | ### **POST** `/users/self/deactivate` (requires authentication header) 294 | 295 | The `POST /users/self/deactivate` endpoint deactivates the current user account. Posts will not be deleted, but be warned that all corresponding Byte names (URLs) will be renamed to random names and the original names released back into the wild. 296 | 297 | #### Sample Query 298 | 299 | ```bash 300 | curl -X POST -H "Authorization: Bearer " -H "Content-Type:application/json" -H "Accept:application/json" https://api.byte.co/v1/users/self/deactivate -d '{}' 301 | ``` 302 | 303 | #### Sample Response 304 | 305 | ```json 306 | { 307 | "data": { 308 | "status": "inactive" 309 | }, 310 | "success": 1 311 | } 312 | ``` 313 | 314 | 315 | ### **POST** `/users/self/reactivate` (requires authentication header) 316 | 317 | The `POST /users/self/reactivate` endpoint reactivates the current user session. Posts will be restored, but remember that all corresponding Byte names (URLs) will have been renamed to random names. 318 | 319 | #### Sample Query 320 | 321 | ```bash 322 | curl -X POST -H "Authorization: Bearer " -H "Content-Type:application/json" -H "Accept:application/json" https://api.byte.co/v1/users/self/reactivate -d '{}' 323 | ``` 324 | 325 | #### Sample Response 326 | 327 | ```json 328 | { 329 | "data": { 330 | "status": "active" 331 | }, 332 | "success": 1 333 | } 334 | ``` 335 | 336 | 337 | ### **POST** `/account/check-name` (requires authentication header) 338 | 339 | The `POST /account/check-name` endpoint checks whether a name is available. 340 | 341 | #### Sample Query 342 | 343 | ```bash 344 | curl -X POST -H "Authorization: Bearer " -H "Content-Type:application/json" -H "Accept:application/json" https://api.byte.co/v1/account/check-name -d '{"name": ""}' 345 | ``` 346 | 347 | #### Sample Response 348 | 349 | ```json 350 | { 351 | "data": { 352 | "isAvailable": true 353 | }, 354 | "success": 1 355 | } 356 | ``` 357 | 358 | 359 | ### **GET** `/user/feed` (requires authentication header) 360 | 361 | The `GET /user/feed` endpoint retrieves the user's feed. 362 | 363 | #### Sample Query 364 | 365 | ```bash 366 | curl -X GET -H "Authorization: Bearer " -H "Content-Type:application/json" -H "Accept:application/json" https://api.byte.co/v1/user/feed' 367 | ``` 368 | 369 | #### Sample Response 370 | 371 | ```json 372 | { 373 | "data": { 374 | "cursor": "", 375 | "posts": [, , ] 376 | }, 377 | "success": 1 378 | } 379 | ``` 380 | 381 | 382 | ### **GET** `/users/recommended` (requires authentication header) 383 | 384 | The `GET /users/recommended` endpoint retrieves a list of suggested users to follow. 385 | 386 | #### Sample Query 387 | 388 | ```bash 389 | curl -X GET -H "Authorization: Bearer " -H "Content-Type:application/json" -H "Accept:application/json" https://api.byte.co/v1/users/recommended' 390 | ``` 391 | 392 | #### Sample Response 393 | 394 | ```json 395 | { 396 | "data": { 397 | "users": [, , ], 398 | }, 399 | "success": 1 400 | } 401 | ``` 402 | 403 | 404 | ### **GET** `/users/u/` (requires authentication header) 405 | 406 | The `GET /users/u/` endpoint looks up a user's profile. 407 | 408 | #### Sample Query 409 | 410 | ```bash 411 | curl -X GET -H "Authorization: Bearer " -H "Content-Type:application/json" -H "Accept:application/json" https://api.byte.co/v1/users/u/' 412 | ``` 413 | 414 | #### Sample Response 415 | 416 | ```json 417 | { 418 | "data": { 419 | "cursor": null, 420 | "posts": [, , ], 421 | "user": { 422 | "username": "ByteHQ", 423 | "isFollowingYou": 0, 424 | "isFollowedByYou": 1, 425 | "description": null, 426 | "profilePost": 427 | }, 428 | "success": 1 429 | } 430 | ``` 431 | 432 | 433 | ### **GET** `/users/id/` (requires authentication header) 434 | 435 | The `GET /users/id/` endpoint looks up a user's profile. 436 | 437 | #### Sample Query 438 | 439 | ```bash 440 | curl -X GET -H "Authorization: Bearer " -H "Content-Type:application/json" -H "Accept:application/json" https://api.byte.co/v1/users/id/' 441 | ``` 442 | 443 | #### Sample Response 444 | 445 | ```json 446 | { 447 | "data": { 448 | "cursor": null, 449 | "posts": [, , ], 450 | "user": { 451 | "username": "ByteHQ", 452 | "isFollowingYou": 0, 453 | "isFollowedByYou": 1, 454 | "description": null, 455 | "profilePost": 456 | }, 457 | "success": 1 458 | } 459 | ``` 460 | 461 | 462 | 463 | ## Following 464 | 465 | Endpoints for following users 466 | 467 | | Method | Endpoint | Description | 468 | | :---: | :--- | :--- | 469 | | `POST` | [`/users//follow`](#post-users-userid-follow-requires-authentication-header) | Follow the user with the giver userId. | 470 | | `DELETE` | [`/users//follow`](#delete-users-userid-follow-requires-authentication-header) | Unfollow the user with the giver userId. | 471 | | `GET` | [`/users//followers`](#get-users-userid-followers-requires-authentication-header) | Get a list of all users following the user with the giver userId. | 472 | | `GET` | [`/users//following`](#get-users-userid-following-requires-authentication-header) | Get a list of all users followed by the user with the giver userId. | 473 | | `GET` | [`/users//followers/mutual`](#get-users-userid-followers-mutual-requires-authentication-header) | Get a list of all users both following and followed by the user with the giver userId. | 474 | 475 | 476 | ### **POST** `/users//follow` (requires authentication header) 477 | 478 | The `POST /users//follow` endpoint follows the given user. 479 | 480 | #### Sample Query 481 | 482 | ```bash 483 | curl -X POST -H "Authorization: Bearer " -H "Content-Type:application/json" -H "Accept:application/json" https://api.byte.co/v1/users//follow -d ""' 484 | ``` 485 | 486 | #### Sample Response 487 | 488 | ```json 489 | { 490 | "data": {}, 491 | "success": 1 492 | } 493 | ``` 494 | 495 | 496 | ### **DELETE** `/users//follow` (requires authentication header) 497 | 498 | The `DELETE /users//follow` endpoint unfollows the given user. 499 | 500 | #### Sample Query 501 | 502 | ```bash 503 | curl -X DELETE -H "Authorization: Bearer " -H "Content-Type:application/json" -H "Accept:application/json" https://api.byte.co/v1/users//follow' 504 | ``` 505 | 506 | #### Sample Response 507 | 508 | ```json 509 | { 510 | "data": {}, 511 | "success": 1 512 | } 513 | ``` 514 | 515 | 516 | ### **GET** `/users//followers` (requires authentication header) 517 | 518 | The `GET /users//followers` endpoint retrieves the list of users following the given user. 519 | 520 | #### Sample Query 521 | 522 | ```bash 523 | curl -X GET -H "Authorization: Bearer " -H "Content-Type:application/json" -H "Accept:application/json" https://api.byte.co/v1/users//followers' 524 | ``` 525 | 526 | #### Sample Response 527 | 528 | ```json 529 | { 530 | "data": { 531 | { 532 | "users": [, , ] 533 | } 534 | }, 535 | "success": 1 536 | } 537 | ``` 538 | 539 | 540 | ### **GET** `/users//following` (requires authentication header) 541 | 542 | The `GET /users//following` endpoint retrieves the list of users followed by the given user. 543 | 544 | #### Sample Query 545 | 546 | ```bash 547 | curl -X GET -H "Authorization: Bearer " -H "Content-Type:application/json" -H "Accept:application/json" https://api.byte.co/v1/users//following' 548 | ``` 549 | 550 | #### Sample Response 551 | 552 | ```json 553 | { 554 | "data": { 555 | { 556 | "users": [, , ] 557 | } 558 | }, 559 | "success": 1 560 | } 561 | ``` 562 | 563 | 564 | ### **GET** `/users//followers/mutual` (requires authentication header) 565 | 566 | The `GET /users//following` endpoint retrieves the list of users both following and followed by the given user. 567 | 568 | #### Sample Query 569 | 570 | ```bash 571 | curl -X GET -H "Authorization: Bearer " -H "Content-Type:application/json" -H "Accept:application/json" https://api.byte.co/v1/users//followers/mutual' 572 | ``` 573 | 574 | #### Sample Response 575 | 576 | ```json 577 | { 578 | "data": { 579 | { 580 | "users": [, , ] 581 | } 582 | }, 583 | "success": 1 584 | } 585 | ``` 586 | 587 | 588 | 589 | 590 | ## Names 591 | 592 | Names are a Byte representation of URLs on the legacy web—they map a human–readable String name to the unique post ID. Each Byte must have a unique name. To assist with this process, we supply an endpoint for checking name availabilty; an endpoint also exists for obtaining a set of randomly generated names conforming to the Byte standards. The basic naming rules are: 593 | 594 | * Minimum of 2 and maximum of 60 characters in length 595 | * Valid characters are alphanumeric, `_`, and `-` 596 | * A single `#` is allowed at the end of the name—this indicates a hidden Byte 597 | * Original casing is stored on the Byte, but "Apple" is the same as "apple" for lookup/claim purposes 598 | * The special name `random` points to a random byte rather than a particular byte 599 | 600 | A simple Python reg–ex to enforce this rule set is: `^[-\w]{2,60}#?$` 601 | 602 | | Method | Endpoint | Description | 603 | | :---: | :--- | :--- | 604 | | `GET` | [`/names`](#get-names) | Returns a set of ten randomly generated Byte names | 605 | | `POST` | [`/name/validate`](#post-namevalidate-optional-authentication-header) | Validates a single name for Byte usage | 606 | 607 | 608 | ### **GET** `/names` 609 | 610 | The `GET /names` endpoint returns a set of ten randomly generated names valid for Byte usage. Note that these names are available at the time of request, but may be claimed by other Bytes before the Byte creation step is completed. 611 | 612 | #### Sample Query 613 | 614 | ```bash 615 | curl -X GET -H "Accept:application/json" https://api.byte.co/v1/names 616 | ``` 617 | 618 | #### Sample Response 619 | 620 | ```json 621 | { 622 | "data": { 623 | "names": [ 624 | "-jk68bnvsqs", 625 | "egb5gyfi-6w", 626 | "n5e-fc3x54c", 627 | "bjzgnpiplla", 628 | "rorhs05_ywk", 629 | "f_ypauesbzk", 630 | "ypffiw81iou", 631 | "psffkjlnrc8", 632 | "iudle_6hbcy", 633 | "2mhw3a1pb8w" 634 | ] 635 | }, 636 | "success": 1 637 | } 638 | ``` 639 | 640 | 641 | ### **POST** `/name/validate` (optional authentication header) 642 | 643 | The `POST /name/validate` endpoint validates a single name for Byte usage; this also includes a (free!) availability check. Note that this is more of a hint than a promise, as the name may be claimed by another Byte before the Byte creation step is completed. 644 | 645 | If an authentication header is supplied, we will also check if the corresponding user has reached their daily quota of valuable names (we throttle these claims to discourage poaching/camping). 646 | 647 | | Parameter | Type | Description | Example | 648 | | :---: | :---: | :--- | :--- | 649 | | `name` | String | Required. The name to validate. | `"cat#"` | 650 | 651 | #### Sample Query 652 | 653 | ```bash 654 | curl -X POST -H "Accept:application/json" -H "Content-Type:application/json" https://api.byte.co/name/validate -d '{"name": "cat"}' 655 | ``` 656 | 657 | #### Sample Response 658 | 659 | ```json 660 | { 661 | "data": { 662 | "ok": true 663 | }, 664 | "success": 1 665 | } 666 | ``` 667 | 668 | #### Error States 669 | 670 | | Code | Message | 671 | | :---: | :--- | 672 | | 1012 | Invalid name | 673 | | 1810 | Post name is unavailable | 674 | | 1811 | Valuable names are limited daily per user | 675 | 676 | 677 | 678 | ## Posts (Consumption) 679 | 680 | Posts are the crux of Byte—they are the Bytes themselves. 681 | 682 | I could try and tell a wonderfully impressive story about how we tried using the name `/bytes` in the API and perhaps it conflicted with a naming scheme in some versions of iOS but I won't: Bytes are called Posts because Byte has experienced several evolutions on the road to where we are today and the API naming didn't keep up with our copywriter's brilliance. That being said, be warned that we may possibly rename these endpoints in future API versions! 683 | 684 | Each Byte consists of a number of pieces of information: 685 | 686 | * `package`: Defined in the [BFF (Byte File Format)](./bff.md) 687 | * `caption`: A brief title string 688 | * `name`: The addressable endpoint for the Byte 689 | * `thumbnailSrc`: A url to a thumbnail image of the Byte 690 | * `musicSrc`: An optional url to an mp3 generated from the music object on the post 691 | 692 | 693 | 694 | 695 | 696 | | Method | Endpoint | Description | 697 | | :---: | :--- | :--- | 698 | | `GET` | [`/posts/id/`](#get-postsidstringpost_id-optional-authentication-header) | Returns a single Byte by ID | 699 | | `POST` | [`/posts/id`](#post-postsid-optional-authentication-header) | Returns a set of Bytes by ID | 700 | | `POST` | [`/posts/name`](#post-postsname-optional-authentication-header) | Returns one or more Bytes by name | 701 | | `GET` | [`/posts/self`](#get-postsself-requires-authentication-header) | Returns the set of Bytes created by a user | 702 | | `GET` | [`/posts/self/signed`](#get-postsselfsigned-requires-authentication-header) | Returns the set of signed Bytes created by a user | 703 | | `GET` | [`/posts/self/unsigned`](#get-postsselfunsigned-requires-authentication-header) | Returns the set of incognito Bytes created by a user | 704 | | `GET` | [`/posts/latest`](#get-postslatest-optional-authentication-header) | Returns a set of the most recent Bytes | 705 | | `GET` | [`/posts/popular`](#get-postspopular-optional-authentication-header) | Returns a set of the most popular Bytes | 706 | 707 | 708 | ### **GET** `/posts/id/` (optional authentication header) 709 | 710 | The `GET /posts/id/` endpoint returns a single Byte by ID. 711 | 712 | If an authentication header is supplied, the response will set the `post.ownedByUser` Boolean accordingly, indicating whether the user has edit permissions on the Byte. 713 | 714 | Optional query params: 715 | 716 | * `scheme`: One of `summary` or `full` 717 | 718 | #### Sample Query 719 | 720 | ```bash 721 | curl -X GET -H "Authorization: Bearer " -H "Accept:application/json" https://api.byte.co/v1/posts/id/ 722 | ``` 723 | 724 | #### Sample Response 725 | 726 | ```json 727 | { 728 | "data": { 729 | "post": { 730 | 731 | } 732 | }, 733 | "success": 1 734 | } 735 | ``` 736 | 737 | #### Error States 738 | 739 | | Code | Message | 740 | | :---: | :--- | 741 | | 1801 | Post does not exist | 742 | 743 | 744 | ### **POST** `/posts/id` (optional authentication header) 745 | 746 | The `POST /posts/id` endpoint returns a set of Bytes by ID. 747 | 748 | If an authentication header is supplied, the response will set the `post.ownedByUser` Booleans accordingly, indicating whether the user has edit permissions on the Bytes. 749 | 750 | Optional query params: 751 | 752 | * `scheme`: One of `summary` or `full` 753 | 754 | | Parameter | Type | Description | Example | 755 | | :---: | :---: | :--- | :--- | 756 | | `ids` | Array | Required. An array of Byte IDs (Strings). | `[""]` | 757 | 758 | #### Sample Query 759 | 760 | ```bash 761 | curl -X POST -H "Authorization: Bearer " -H "Accept:application/json" -H "Content-Type:application/json" https://api.byte.co/v1/posts/id -d '{"ids": ["", ""]}' 762 | ``` 763 | 764 | #### Sample Response 765 | 766 | ```json 767 | { 768 | "data": { 769 | "posts": [, ] 770 | }, 771 | "success": 1 772 | } 773 | ``` 774 | 775 | #### Error States 776 | 777 | | Code | Message | 778 | | :---: | :--- | 779 | | 1005 | Invalid Object/Validation Error | 780 | | 1801 | Post does not exist | 781 | 782 | 783 | ### **POST** `/posts/name` (optional authentication header) 784 | 785 | The `POST /posts/name` endpoint returns one or more Bytes by name. 786 | 787 | If an authentication header is supplied, the response will set the `post.ownedByUser` Booleans accordingly, indicating whether the user has edit permissions on the Bytes. 788 | 789 | Optional query params: 790 | 791 | * `scheme`: One of `summary` or `full` 792 | 793 | | Parameter | Type | Description | Example | 794 | | :---: | :---: | :--- | :--- | 795 | | `name` | String | Optional. A single Byte name. | `"cat"` | 796 | | `names` | Array | Optional. Array of names (Strings). | `["cat", ...]` | 797 | 798 | One of `name` or `names` must be set. 799 | 800 | #### Sample Query 801 | 802 | ```bash 803 | curl -X POST -H "Authorization: Bearer " -H "Accept:application/json" -H "Content-Type:application/json" https://api.byte.co/v1/posts/name -d '{"name": ""}' 804 | ``` 805 | 806 | #### Sample Response 807 | 808 | ```json 809 | { 810 | "data": { 811 | "post": 812 | }, 813 | "success": 1 814 | } 815 | ``` 816 | 817 | #### Sample Query 818 | 819 | ```bash 820 | curl -X POST -H "Authorization: Bearer " -H "Accept:application/json" -H "Content-Type:application/json" https://api.byte.co/v1/posts/name -d '{"names": ["", ""]}' 821 | ``` 822 | 823 | #### Sample Response 824 | 825 | ```json 826 | { 827 | "data": { 828 | "posts": [, ] 829 | }, 830 | "success": 1 831 | } 832 | ``` 833 | 834 | #### Error States 835 | 836 | | Code | Message | 837 | | :---: | :--- | 838 | | 1005 | Invalid Object/Validation Error | 839 | | 1801 | Post does not exist | 840 | 841 | 842 | ### **GET** `/posts/self` (requires authentication header) 843 | 844 | The `GET /posts/self` endpoint returns all Bytes created by the requesting user. 845 | 846 | Optional query params: 847 | 848 | * `scheme`: One of `summary` or `full` 849 | * `cursor`: A String designating the current position in a query result set 850 | 851 | #### Sample Query 852 | 853 | ```bash 854 | curl -X GET -H "Authorization: Bearer " -H "Accept:application/json" https://api.byte.co/v1/posts/self 855 | ``` 856 | 857 | #### Sample Response 858 | 859 | ```json 860 | { 861 | "data": { 862 | "cursor": "", 863 | "posts": ["", "", ""], 864 | "more": false 865 | }, 866 | "success": 1 867 | } 868 | ``` 869 | 870 | ### **GET** `/posts/self/signed` (requires authentication header) 871 | 872 | The `GET /posts/self/signed` endpoint returns all signed Bytes created by the requesting user. 873 | 874 | Optional query params: 875 | 876 | * `scheme`: One of `summary` or `full` 877 | * `cursor`: A String designating the current position in a query result set 878 | 879 | #### Sample Query 880 | 881 | ```bash 882 | curl -X GET -H "Authorization: Bearer " -H "Accept:application/json" https://api.byte.co/v1/posts/self/signed 883 | ``` 884 | 885 | #### Sample Response 886 | 887 | ```json 888 | { 889 | "data": { 890 | "cursor": "", 891 | "posts": ["", "", ""], 892 | "more": false 893 | }, 894 | "success": 1 895 | } 896 | ``` 897 | 898 | 899 | ### **GET** `/posts/self/unsigned` (requires authentication header) 900 | 901 | The `GET /posts/self/unsigned` endpoint returns all incognito Bytes created by the requesting user. 902 | 903 | Optional query params: 904 | 905 | * `scheme`: One of `summary` or `full` 906 | * `cursor`: A String designating the current position in a query result set 907 | 908 | #### Sample Query 909 | 910 | ```bash 911 | curl -X GET -H "Authorization: Bearer " -H "Accept:application/json" https://api.byte.co/v1/posts/self/unsigned 912 | ``` 913 | 914 | #### Sample Response 915 | 916 | ```json 917 | { 918 | "data": { 919 | "cursor": "", 920 | "posts": ["", "", ""], 921 | "more": false 922 | }, 923 | "success": 1 924 | } 925 | ``` 926 | 927 | 928 | 929 | ### **GET** `/posts/latest` (optional authentication header) 930 | 931 | The `GET /posts/latest` endpoint returns a set of the most recent Bytes across the entire Byteverse. 932 | 933 | If an authentication header is supplied, the response will set the `post.ownedByUser` Booleans accordingly, indicating whether the user has edit permissions on the Bytes. 934 | 935 | Optional query params: 936 | 937 | * `scheme`: One of `summary` or `full` 938 | * `cursor`: A String designating the current position in a query result set 939 | * `excludeBlanks`: If true, exclude blank posts from the results. 940 | 941 | #### Sample Query 942 | 943 | ```bash 944 | curl -X GET -H "Authorization: Bearer " -H "Accept:application/json" https://api.byte.co/v1/posts/latest 945 | ``` 946 | 947 | #### Sample Response 948 | 949 | ```json 950 | { 951 | "data": { 952 | "cursor": "", 953 | "posts": [ 954 | { 955 | "updated": 1441054312929, 956 | "author": { 957 | "username": "", 958 | "id": "", 959 | "profilePhoto": "" 960 | }, 961 | "name": "", 962 | "created": 1441054312929, 963 | "deleted": false, 964 | "stickersCount": 0, 965 | "createdString": "1441054312929", 966 | "lookCount": 5, 967 | "caption": "", 968 | "thumbnailSrc": "", 969 | "updatedString": "1441054312929", 970 | "favCount": 0, 971 | "id": "", 972 | "commentsCount": 0 973 | }, 974 | ], 975 | "more": true 976 | }, 977 | "success": 1 978 | } 979 | ``` 980 | 981 | ### **GET** `/posts/staff-picks` (optional authentication header) 982 | 983 | The `GET /posts/staff-picks` endpoint returns Bytes selected as noteworthy by Byte staff members. 984 | 985 | Optional query params: 986 | 987 | * `cursor`: A String designating the current position in a query result set 988 | 989 | #### Sample Query 990 | 991 | ```bash 992 | curl -X GET -H "Authorization: Bearer " -H "Accept:application/json" https://api.byte.co/v1/posts/staff-picks 993 | ``` 994 | 995 | #### Sample Response 996 | 997 | ```json 998 | { 999 | "data": { 1000 | "cursor": "", 1001 | "posts": [ 1002 | { 1003 | "updated": 1441050312977, 1004 | "author": { 1005 | "username": "", 1006 | "id": "", 1007 | "profilePhoto": "" 1008 | }, 1009 | "name": "", 1010 | "created": 1439516560383, 1011 | "deleted": false, 1012 | "stickersCount": 7, 1013 | "createdString": "1439516560383", 1014 | "lookCount": 7, 1015 | "caption": "", 1016 | "thumbnailSrc": "", 1017 | "updatedString": "1441050312977", 1018 | "favCount": 0, 1019 | "id": "", 1020 | "commentsCount": 1 1021 | }, 1022 | { 1023 | "updated": 1441050296279, 1024 | "author": { 1025 | "username": "", 1026 | "id": "", 1027 | "profilePhoto": "" 1028 | }, 1029 | "name": "", 1030 | "created": 1439504831994, 1031 | "deleted": false, 1032 | "stickersCount": 11, 1033 | "createdString": "1439504831994", 1034 | "lookCount": 281, 1035 | "caption": "", 1036 | "thumbnailSrc": "", 1037 | "updatedString": "1441050296279", 1038 | "favCount": 16, 1039 | "id": "", 1040 | "commentsCount": 6 1041 | } 1042 | ], 1043 | "more": false 1044 | }, 1045 | "success": 1 1046 | } 1047 | ``` 1048 | 1049 | 1050 | 1051 | ### **GET** `/posts/popular` (optional authentication header) 1052 | 1053 | The `GET /posts/popular` endpoint returns a set of the most popular Bytes across the entire Byteverse. 1054 | 1055 | If an authentication header is supplied, the response will set the `post.ownedByUser` Booleans accordingly, indicating whether the user has edit permissions on the Bytes. 1056 | 1057 | Optional query params: 1058 | 1059 | * `scheme`: One of `summary` or `full` 1060 | 1061 | #### Sample Query 1062 | 1063 | ```bash 1064 | curl -X GET -H "Authorization: Bearer " -H "Accept:application/json" https://api.byte.co/v1/posts/popular 1065 | ``` 1066 | 1067 | #### Sample Response 1068 | 1069 | ```json 1070 | { 1071 | "data": { 1072 | "posts": [ 1073 | { 1074 | "updated": 1441021189449, 1075 | "name": "", 1076 | "author": { 1077 | "username": "", 1078 | "id": "", 1079 | "profilePhoto": "" 1080 | }, 1081 | "created": 1440071195668, 1082 | "deleted": false, 1083 | "stickersCount": 0, 1084 | "createdString": "1440071195668", 1085 | "lookCount": 641, 1086 | "caption": "", 1087 | "thumbnailSrc": "", 1088 | "updatedString": "1441021189449", 1089 | "favCount": 21, 1090 | "id": "", 1091 | "commentsCount": 0 1092 | }, 1093 | ] 1094 | }, 1095 | "success": 1 1096 | } 1097 | ``` 1098 | 1099 | 1100 | 1101 | ## Comments 1102 | 1103 | Users can place comments and stickers on individual Bytes. Offensive or inappropriate comments may be deleted without warning. 1104 | Users can edit or delete comments that they created. The author of a post can delete other users' comments from it. 1105 | 1106 | 1107 | 1108 | | Method | Endpoint | Description | 1109 | | :---: | :--- | :--- | 1110 | | `POST` | [`/posts/id//comments`](#post-postsidstringpost_idcomments-requires-authentication-header) | Places a comment on a Byte by ID | 1111 | | `PUT` | [`/posts/id//comments/`](#user-content-put-postsidstringpost_idcommentsstringcomment_id-requires-authentication-header) | Updates a comment | 1112 | | `DELETE` | [`/posts/id//comments/`](#user-content-delete-postsidstringpost_idcommentsstringcomment_id-requires-authentication-header) | Deletes a comment | 1113 | 1114 | 1115 | ### **POST** `/posts/id//comments` (requires authentication header) 1116 | 1117 | The `POST /posts/id//comments` endpoint places a comment on a Byte by ID. 1118 | 1119 | | Parameter | Type | Description | Example | 1120 | | :---: | :---: | :--- | :--- | 1121 | | `point` | Object | Required. `(x, y)` coordinates of the centre point of the comment corresponding to the location of the comment on the 324x570 canvas. | `{"x": 120, "y": 120}` | 1122 | | `body` | String | Optional. A comment String. This can include unicode and emoji characters, but links will not be parsed. | `"Hello!"` | 1123 | | `sticker` | String | Optional. A String corresponding to a sticker asset. | `"StickerCrab"` | 1124 | 1125 | One of `body` or `sticker` is required. 1126 | 1127 | Possible stickers are: 1128 | * `"StickerBandage"` 1129 | * `"StickerBeaker"` 1130 | * `"StickerBomb"` 1131 | * `"StickerBulb"` 1132 | * `"StickerCactus"` 1133 | * `"StickerCat"` 1134 | * `"StickerCorndog"` 1135 | * `"StickerCrab"` 1136 | * `"StickerDiamond"` 1137 | * `"StickerDog"` 1138 | * `"StickerDonut"` 1139 | * `"StickerDrop"` 1140 | * `"StickerEggplant"` 1141 | * `"StickerFrog"` 1142 | * `"StickerHeart"` 1143 | * `"StickerIce"` 1144 | * `"StickerIceCream"` 1145 | * `"StickerJellyfish"` 1146 | * `"StickerJoystick"` 1147 | * `"StickerKite"` 1148 | * `"StickerLighter"` 1149 | * `"StickerLightning"` 1150 | * `"StickerLime"` 1151 | * `"StickerMagGlass"` 1152 | * `"StickerMartini"` 1153 | * `"StickerMonkey"` 1154 | * `"StickerPlanet"` 1155 | * `"StickerPoo"` 1156 | * `"StickerRainbow"` 1157 | * `"StickerRibbon"` 1158 | * `"StickerSalt"` 1159 | * `"StickerSmiley"` 1160 | * `"StickerSpray"` 1161 | * `"StickerStar"` 1162 | * `"StickerTea"` 1163 | * `"StickerThumbsDown"` 1164 | * `"StickerThumbsUp"` 1165 | * `"StickerTissue"` 1166 | * `"StickerTopHat"` 1167 | * `"StickerTurtle"` 1168 | 1169 | #### Sample Queries 1170 | 1171 | ```bash 1172 | curl -X POST -H "Authorization: Bearer " -H "Content-Type: application/json" -H "Accept: application/json" https://api.byte.co/v1/posts/id//comments -d '{"point": {"x": 192, "y": 297}, "body": ""}' 1173 | ``` 1174 | 1175 | ```bash 1176 | curl -X POST -H "Authorization: Bearer " -H "Content-Type: application/json" -H "Accept: application/json" https://api.byte.co/v1/posts/id//comments -d '{"point": {"x": 192, "y": 297}, "sticker": "StickerHeart"}' 1177 | ``` 1178 | 1179 | #### Sample Responses 1180 | 1181 | ```json 1182 | { 1183 | "data": { 1184 | "comment": { 1185 | "body": "", 1186 | "author": { 1187 | "username": "", 1188 | "id": "", 1189 | "profilePhoto": "" 1190 | }, 1191 | "point": { 1192 | "y": 297.0, 1193 | "x": 192.0 1194 | }, 1195 | "markup": [], 1196 | "created": 1441057587673, 1197 | "createdString": "1441057587673", 1198 | "postId": "", 1199 | "type": "text", 1200 | "id": "" 1201 | } 1202 | }, 1203 | "success": 1 1204 | } 1205 | ``` 1206 | 1207 | ```json 1208 | { 1209 | "data": { 1210 | "comment": { 1211 | "author": { 1212 | "username": "", 1213 | "id": "", 1214 | "profilePhoto": "" 1215 | }, 1216 | "point": { 1217 | "y": 297.0, 1218 | "x": 192.0 1219 | }, 1220 | "sticker": "StickerHeart", 1221 | "created": 1441132161871, 1222 | "createdString": "1441132161871", 1223 | "postId": "", 1224 | "type": "sticker", 1225 | "id": "" 1226 | } 1227 | }, 1228 | "success": 1 1229 | } 1230 | ``` 1231 | 1232 | #### Error States 1233 | 1234 | | Code | Message | 1235 | | :---: | :--- | 1236 | | 1801 | Post does not exist | 1237 | 1238 | 1239 | 1240 | ### **PUT** `/posts/id//comments/` (requires authentication header) 1241 | 1242 | The `PUT /posts/id//comments/` endpoint updates a comment. Users can only update their own comments. 1243 | 1244 | | Parameter | Type | Description | Example | 1245 | | :---: | :---: | :--- | :--- | 1246 | | `point` | Object | Optional. `(x, y)` coordinates of the centre point of the comment corresponding to the location of the comment on the 324x570 canvas. | `{"x": 120, "y": 120}` | 1247 | | `body` | String | Optional. A comment String. This can include unicode and emoji characters, but links will not be parsed. | `"Hello!"` | 1248 | | `sticker` | String | Optional. A String corresponding to a sticker asset. | `"StickerCrab"` | 1249 | 1250 | All arguments are optional. Note that the type of a comment cannot be changed from text to sticker or vice versa. 1251 | A modified `body` field can only be included for a comment that already has a body (a text comment) and a modified `sticker` field can only be included for a comment that already has a sticker type. 1252 | 1253 | See comment creation for a list of sticker types. 1254 | 1255 | 1256 | #### Sample Queries 1257 | 1258 | ```bash 1259 | curl -X PUT -H "Authorization: Bearer " -H "Content-Type: application/json" -H "Accept: application/json" https://api.byte.co/v1/posts/id//comments/ -d '{"body": ""}' 1260 | ``` 1261 | 1262 | ```bash 1263 | curl -X PUT -H "Authorization: Bearer " -H "Content-Type: application/json" -H "Accept: application/json" https://api.byte.co/v1/posts/id//comments/ -d '{"point": {"x": 192, "y": 297}, "sticker": "StickerHeart"}' 1264 | ``` 1265 | 1266 | #### Sample Responses 1267 | 1268 | ```json 1269 | { 1270 | "data": { 1271 | "comment": { 1272 | "body": "", 1273 | "author": { 1274 | "username": "", 1275 | "id": "", 1276 | "profilePhoto": "" 1277 | }, 1278 | "point": { 1279 | "y": 297.0, 1280 | "x": 192.0 1281 | }, 1282 | "markup": [], 1283 | "created": 1441057587673, 1284 | "createdString": "1441057587673", 1285 | "postId": "", 1286 | "type": "text", 1287 | "id": "" 1288 | } 1289 | }, 1290 | "success": 1 1291 | } 1292 | ``` 1293 | 1294 | ```json 1295 | { 1296 | "data": { 1297 | "comment": { 1298 | "author": { 1299 | "username": "", 1300 | "id": "", 1301 | "profilePhoto": "" 1302 | }, 1303 | "point": { 1304 | "y": 297.0, 1305 | "x": 192.0 1306 | }, 1307 | "sticker": "StickerHeart", 1308 | "created": 1441132161871, 1309 | "createdString": "1441132161871", 1310 | "postId": "", 1311 | "type": "sticker", 1312 | "id": "" 1313 | } 1314 | }, 1315 | "success": 1 1316 | } 1317 | ``` 1318 | 1319 | #### Error States 1320 | 1321 | | Code | Message | 1322 | | :---: | :--- | 1323 | | 1801 | Post does not exist | 1324 | | 2004 | User does not have permissions to update comment | 1325 | 1326 | 1327 | 1328 | 1329 | ### **DELETE** `/posts/id//comments/` (requires authentication header) 1330 | 1331 | The `DELETE /posts/id//comments/` endpoint deletes a comment. Users can delete their own comments and any comments on posts that they created. 1332 | 1333 | #### Sample Query 1334 | 1335 | ```bash 1336 | curl -X DELETE -H "Authorization: Bearer " -H "Content-Type: application/json" -H "Accept: application/json" https://api.byte.co/v1/posts/id//comments/ 1337 | ``` 1338 | 1339 | #### Sample Responses 1340 | 1341 | ```json 1342 | { 1343 | "data": {}, 1344 | "success": 1 1345 | } 1346 | ``` 1347 | 1348 | #### Error States 1349 | 1350 | | Code | Message | 1351 | | :---: | :--- | 1352 | | 1801 | Post does not exist | 1353 | | 2004 | User does not have permissions to modify comment | 1354 | 1355 | 1356 | 1357 | ## Bookmarks 1358 | 1359 | Users have the ability to bookmark Bytes. This is similar to a bookmark in a web browser, with the added benefit of user notifications when bookmarked Bytes are updated. For legacy reasons the bookmark endpoints are prefixed with `fav`. Bookmarks were previously called stars. 1360 | 1361 | | Method | Endpoint | Description | 1362 | | :---: | :--- | :--- | 1363 | | `POST` | [`/posts/id//fav`](#post-postsidstringpost_idfav-requires-authentication-header) | Bookmarks a Byte by ID | 1364 | | `DELETE` | [`/posts/id//fav`](#delete-postsidstringpost_idfav-requires-authentication-header) | Removes a bookmark from a Byte by ID | 1365 | | `GET` | [`/posts/favs`](#get-postsfavs-requires-authentication-header) | Lists the current user's bookmarked Bytes | 1366 | 1367 | 1368 | ### **POST** `/posts/id//fav` (requires authentication header) 1369 | 1370 | The `POST /posts/id//fav` endpoint bookmarks a Byte by ID. 1371 | 1372 | #### Sample Query 1373 | 1374 | ```bash 1375 | curl -X POST -H "Authorization: Bearer " -H "Content-Type: application/json" -H "Accept: application/json" https://api.byte.co/v1/posts/id//fav -d '{}' 1376 | ``` 1377 | 1378 | #### Sample Response 1379 | 1380 | ```json 1381 | { 1382 | "data": {}, 1383 | "success": 1 1384 | } 1385 | ``` 1386 | 1387 | 1388 | ### **DELETE** `/posts/id//fav` (requires authentication header) 1389 | 1390 | The `DELETE /posts/id//fav` endpoint removes a boomark from a Byte by ID. 1391 | 1392 | #### Sample Query 1393 | 1394 | ```bash 1395 | curl -X DELETE -H "Authorization: Bearer " -H "Accept: application/json" https://api.byte.co/v1/posts/id//fav 1396 | ``` 1397 | 1398 | #### Sample Response 1399 | 1400 | ```json 1401 | { 1402 | "data": {}, 1403 | "success": 1 1404 | } 1405 | ``` 1406 | 1407 | 1408 | ### **GET** `/posts/favs` (requires authentication header) 1409 | 1410 | The `GET /posts/favs` endpoint gets a list of the current user's bookmarked Bytes, ordered by post updated time. 1411 | 1412 | Optional query params: 1413 | 1414 | * `scheme`: One of `summary` or `full` 1415 | 1416 | #### Sample Query 1417 | 1418 | ```bash 1419 | curl -X GET -H "Authorization: Bearer " -H "Accept:application/json" https://api.byte.co/v1/posts/favs 1420 | ``` 1421 | 1422 | #### Sample Response 1423 | 1424 | ```json 1425 | { 1426 | "data": { 1427 | "posts": [ 1428 | { 1429 | "updated": 1440385598347, 1430 | "name": "", 1431 | "created": 1440372454111, 1432 | "deleted": false, 1433 | "stickersCount": 2, 1434 | "createdString": "1440372454111", 1435 | "lookCount": 95, 1436 | "caption": "", 1437 | "thumbnailSrc": "", 1438 | "updatedString": "1440385598347", 1439 | "favCount": 0, 1440 | "id": "", 1441 | "commentsCount": 0 1442 | }, 1443 | ] 1444 | }, 1445 | "success": 1 1446 | } 1447 | ``` 1448 | 1449 | 1450 | 1451 | ## Flags 1452 | 1453 | Flagging is an important part of keeping the Byte ecosystem safe, clean, and fun. Users have the ability to flag any given Byte for a variety of reasons, including: 1454 | 1455 | * Offensive Post 1456 | * Copyright Issue 1457 | * Contains Personal Information 1458 | 1459 | | Method | Endpoint | Description | 1460 | | :---: | :--- | :--- | 1461 | | `POST` | [`/posts/id//flag`](#post-postsidstringpost_idflag-requires-authentication-header) | Flags a Byte by ID | 1462 | | `DELETE` | [`/posts/id//flag`](#delete-postsidstringpost_idflag-requires-authentication-header) | Removes a flag from a Byte by ID | 1463 | | `GET` | [`/posts/flagged`](#get-postsflagged-requires-authentication-header) | Gets a list of Bytes flagged by a user | 1464 | 1465 | 1466 | ### **POST** `/posts/id//flag` (requires authentication header) 1467 | 1468 | The `POST /posts/id//flag` endpoint flags a Byte by ID. 1469 | 1470 | | Parameter | Type | Description | Example | 1471 | | :---: | :---: | :--- | :--- | 1472 | | `reason` | String | Required. The reason for the flag. | `"offensive"` | 1473 | 1474 | Potential `reason`s are: 1475 | 1476 | * `"offensive"` 1477 | * `"copyright"` 1478 | * `"personal_info"` 1479 | 1480 | #### Sample Query 1481 | 1482 | ```bash 1483 | curl -X POST -H "Authorization: Bearer " -H "Content-Type: application/json" -H "Accept: application/json" https://api.byte.co/v1/posts/id//flag -d '{"reason": "offensive"}' 1484 | ``` 1485 | 1486 | #### Sample Response 1487 | 1488 | ```json 1489 | { 1490 | "data": {}, 1491 | "success": 1 1492 | } 1493 | ``` 1494 | 1495 | 1496 | ### **DELETE** `/posts/id//flag` (requires authentication header) 1497 | 1498 | The `DELETE /posts/id//flag` endpoint removes a flag from a Byte by ID. 1499 | 1500 | #### Sample Query 1501 | 1502 | ```bash 1503 | curl -X DELETE -H "Authorization: Bearer " -H "Accept: application/json" https://api.byte.co/v1/posts/id//flag 1504 | ``` 1505 | 1506 | #### Sample Response 1507 | 1508 | ```json 1509 | { 1510 | "data": {}, 1511 | "success": 1 1512 | } 1513 | ``` 1514 | 1515 | 1516 | ### **GET** `/posts/flagged` (requires authentication header) 1517 | 1518 | The `GET /posts/flagged` endpoint returns a list of Bytes flagged by a user. This can be used to filter the Bytes from display, if desired. 1519 | 1520 | Optional query params: 1521 | 1522 | * `scheme`: One of `summary` or `full` 1523 | * `cursor`: A String designating the current position in a query result set 1524 | 1525 | #### Sample Query 1526 | 1527 | ```bash 1528 | curl -X GET -H "Authorization: Bearer " -H "Accept:application/json" https://api.byte.co/v1/posts/flagged 1529 | ``` 1530 | 1531 | #### Sample Response 1532 | 1533 | ```json 1534 | { 1535 | "data": { 1536 | "cursor": "", 1537 | "posts": [ 1538 | { 1539 | "updated": 1441050296279, 1540 | "name": "", 1541 | "created": 1439504831994, 1542 | "deleted": false, 1543 | "stickersCount": 11, 1544 | "createdString": "1439504831994", 1545 | "lookCount": 302, 1546 | "caption": "", 1547 | "thumbnailSrc": "", 1548 | "updatedString": "1441050296279", 1549 | "favCount": 16, 1550 | "id": "", 1551 | "commentsCount": 8 1552 | } 1553 | ], 1554 | "more": false 1555 | }, 1556 | "success": 1 1557 | } 1558 | ``` 1559 | 1560 | 1561 | 1562 | ## Activity 1563 | 1564 | Byte triggers activity messages in a variety of situations, including: 1565 | 1566 | * Remixes 1567 | * Links 1568 | * Comments/Stickers 1569 | * Mentions 1570 | * Follows 1571 | 1572 | These are generally displayed in an activity feed; many messages are also sent as push notifications. We currently do not support push notifications on third–party clients, but this functionality is in progress (likely via a pub/sub model of sorts). 1573 | 1574 | | Method | Endpoint | Description | 1575 | | :---: | :--- | :--- | 1576 | | `GET` | [`/messages`](#get-messages-requires-authentication-header) | Returns the message feed corresponding to the current user session | 1577 | 1578 | 1579 | ### **GET** `/messages` (requires authentication header) 1580 | 1581 | The `GET /messages` endpoint returns the activity feed corresponding to the current user session. 1582 | 1583 | Optional query params: 1584 | 1585 | * `exclude`: An Array of Strings listing the types of messages to exclude from the feed 1586 | * `cursor`: A String designating the current position in a query result set 1587 | 1588 | Message types include: 1589 | 1590 | * `"post"` 1591 | * `"link"` 1592 | * `"remix"` 1593 | * `"comment"` 1594 | * `"follow"` 1595 | * `"mention"` 1596 | 1597 | #### Sample Query 1598 | 1599 | ```bash 1600 | curl -X GET -H "Authorization: Bearer " -H "Accept:application/json" https://api.byte.co/v1/messages 1601 | ``` 1602 | 1603 | #### Sample Response 1604 | 1605 | ```json 1606 | { 1607 | "data": { 1608 | "cursor": null, 1609 | "messages": [ 1610 | { 1611 | "comment": { 1612 | "body": "", 1613 | "author": { 1614 | "username": "", 1615 | "id": "", 1616 | "profilePhoto": "" 1617 | }, 1618 | "post": { 1619 | "updated": 1441050526811, 1620 | "name": "190815", 1621 | "created": 1440030985273, 1622 | "deleted": false, 1623 | "stickersCount": 3, 1624 | "createdString": "1440030985273", 1625 | "lookCount": 64, 1626 | "caption": "", 1627 | "thumbnailSrc": "", 1628 | "updatedString": "1441050526811", 1629 | "favCount": 0, 1630 | "id": "", 1631 | "commentsCount": 3, 1632 | "thumbnails": { 1633 | "default": { 1634 | "url": "", 1635 | "id": "" 1636 | } 1637 | } 1638 | }, 1639 | "type": "text", 1640 | "id": "" 1641 | }, 1642 | "type": "comment", 1643 | "created": 1440981197064 1644 | } 1645 | ], 1646 | "more": false 1647 | }, 1648 | "success": 1 1649 | } 1650 | ``` 1651 | 1652 | 1653 | 1654 | ## Posts (Creation) 1655 | 1656 | There are a few distinct steps in the Byte creation process: 1657 | 1658 | 1. Allow the user to define the package, name, and caption. 1659 | 2. Generate a thumbnail for the Byte. 1660 | 3. Upload each local asset (including the thumbnail) to the Byte Cloud Storage bucket by using the [Files](#get-filessession-requires-authentication-header) endpoints. 1661 | 4. Update the source urls for each local asset to point to the asset in the Byte Cloud Storage bucket. 1662 | 5. `POST` the finished Byte to the server. 1663 | 1664 | Remember that each Byte consists of a number of pieces of information: 1665 | 1666 | * `package`: Defined in the [BFF (Byte File Format)](./bff.md) 1667 | * `caption`: A brief title string 1668 | * `name`: The addressable endpoint for the Byte 1669 | * `thumbnailUrl`: A url to a thumbnail image of the Byte 1670 | 1671 | Note that we limit each user to a certain number of valuable names on a daily basis. This is to discourage squatting/camping of valuable names. If a user has reached their daily limit, we will return error `1811`. 1672 | 1673 | | Method | Endpoint | Description | 1674 | | :---: | :--- | :--- | 1675 | | `GET` | [`/files/session`](#get-filessession-requires-authentication-header) | Generates a unique endpoint to which an asset can be uploaded | 1676 | | `POST` | [`/posts`](#post-posts-requires-authentication-header) | Creates a new Byte | 1677 | | `PUT` | [`/posts/id/`](#put-postsidstringpost_id-requires-authentication-header) | Updates a Byte by ID | 1678 | | `DELETE` | [`/posts/id/`](#delete-postsidstringpost_id-requires-authentication-header) | Deletes a Byte by ID | 1679 | 1680 | 1681 | ### **GET** `/files/session` (requires authentication header) 1682 | 1683 | The `GET /files/session` endpoint generates a unique endpoint to which an asset can be uploaded. 1684 | 1685 | #### Sample Query 1686 | 1687 | ```bash 1688 | curl -X GET -H "Authorization: Bearer " -H "Accept:application/json" https://api.byte.co/v1/files/session 1689 | ``` 1690 | 1691 | #### Sample Response 1692 | 1693 | ```json 1694 | { 1695 | "data": { 1696 | "url": "" 1697 | }, 1698 | "success": 1 1699 | } 1700 | ``` 1701 | 1702 | #### Usage 1703 | 1704 | Once a unique upload endpoint has been generated, the asset itself can be uploaded to the Cloud: 1705 | 1706 | ```bash 1707 | curl -X POST -H "Accept:application/json" -F "file=@/path/to/rubber-duck.png" 1708 | ``` 1709 | 1710 | Sample response: 1711 | ```json 1712 | { 1713 | "data": { 1714 | "file": { 1715 | "url": "", 1716 | "id": "" 1717 | } 1718 | }, 1719 | "success": 1 1720 | } 1721 | ``` 1722 | 1723 | The asset in the package should then be updated with the return asset URL (this is a direct link to the hosted asset). 1724 | 1725 | 1726 | ### **POST** `/posts` (requires authentication header) 1727 | 1728 | The `POST /posts` endpoint is the big one: it creates a new Byte. 1729 | 1730 | Each post can optionally have a caption which is a freeform description string. 1731 | Posts also have a name which must be unique. The name is part of the URL to access the Byte in a web browser (e.g. byte.co/bytename). 1732 | If you don't supply a name a random one is chosen for you. 1733 | 1734 | If the `profile` flag is included and set to true the post will become the background of the user's profile page. 1735 | The `signed` flag controls whether the post will be attributed to the user who created it or not. 1736 | If the user has not claimed a username they cannot sign their Bytes. If the user has a username `signed` defaults to true but can be set to false to make an incognito Byte. 1737 | 1738 | 1739 | | Parameter | Type | Description | Example | 1740 | | :---: | :---: | :--- | :--- | 1741 | | `package` | Object | Required. The package, as defined by [BFF](./bff.md). | See: [BFF](./bff.md) | 1742 | | `thumbnailUrl` | String | Required. A link to the thumbnail asset. | `"https://storage.googleapis.com/assets.byte.co/x.png"` | 1743 | | `caption` | String | Optional. | `The Old Man and the Sea` | 1744 | | `name` | String | Optional. | `fdskljdfs#` | 1745 | | `profile` | Boolean | Optional. | `false` | 1746 | | `signed` | Boolean | Optional. | `false` | 1747 | | `return_inflated_post` | Boolean | Optional. Defaults to True. | `false` | 1748 | 1749 | #### Sample Query 1750 | 1751 | ```bash 1752 | curl -X POST -H "Authorization: Bearer " -H "Content-Type: application/json" -H "Accept: application/json" https://api.byte.co/v1/posts -d '{"package": , "caption": "", "name": "", "thumbnailUrl": ""}' 1753 | ``` 1754 | 1755 | #### Sample Response 1756 | 1757 | ```json 1758 | { 1759 | "data": { 1760 | "post": { 1761 | "lookCount": 0, 1762 | "previewUrl": "", 1763 | "id": "", 1764 | "author": { 1765 | "username": "", 1766 | "id": "", 1767 | "profilePhoto": "" 1768 | }, 1769 | "comments": [], 1770 | "thumbnailSrc": "", 1771 | "musicSrc": "", 1772 | "hidden": true, 1773 | "boost": 0, 1774 | "updated": 1441054921814, 1775 | "authorType": "ByteUser", 1776 | "deleted": false, 1777 | "stickersCount": 0, 1778 | "createdString": "1441054115094", 1779 | "favCount": 0, 1780 | "name": "", 1781 | "thumbnails": { 1782 | "default": { 1783 | "url": "", 1784 | "id": "" 1785 | } 1786 | }, 1787 | "package": {""}, 1788 | "ownedByUser": true, 1789 | "created": 1441054115094, 1790 | "caption": "", 1791 | "updatedString": "1441054921814", 1792 | "commentsCount": 0 1793 | } 1794 | }, 1795 | "success": 1 1796 | } 1797 | ``` 1798 | 1799 | #### Error States 1800 | 1801 | | Code | Message | 1802 | | :---: | :--- | 1803 | | 1010 | Unique UUID4 generation failed | 1804 | | 1011 | Unique hashid generation failed | 1805 | | 1012 | Invalid name | 1806 | | 1810 | Post name is unavailable | 1807 | | 1811 | Valuable names are limited daily per user | 1808 | | 1812 | Invalid package | 1809 | 1810 | 1811 | ### **PUT** `/posts/id/` (requires authentication header) 1812 | 1813 | The `PUT /posts/id/` endpoint allows for updating/editing a Byte. 1814 | You only need to include parameters for attributes you want to change. 1815 | Note that profile Bytes must be signed. 1816 | 1817 | | Parameter | Type | Description | Example | 1818 | | :---: | :---: | :--- | :--- | 1819 | | `package` | Object | Optional. The package, as defined by [BFF](./bff.md). | See: [BFF](./bff.md) | 1820 | | `caption` | String | Optional. | `The Old Man and the Sea` | 1821 | | `name` | String | Optional. | `fdskljdfs#` | 1822 | | `thumbnailUrl` | String | Optional. A link to the thumbnail asset. | `"https://storage.googleapis.com/assets.byte.co/x.png"` | 1823 | | `signed` | Boolean | Optional. | `true` | 1824 | 1825 | #### Sample Query 1826 | 1827 | ```bash 1828 | curl -X PUT -H "Authorization: Bearer " -H "Content-Type: application/json" -H "Accept: application/json" https://api.byte.co/v1/posts/id/ -d '{"package": , "caption": "", "name": "", "thumbnailUrl": ""}' 1829 | ``` 1830 | 1831 | #### Sample Response 1832 | 1833 | ```json 1834 | { 1835 | "data": { 1836 | "post": { 1837 | "lookCount": 0, 1838 | "author": { 1839 | "username": "", 1840 | "id": "", 1841 | "profilePhoto": "" 1842 | }, 1843 | "previewUrl": "", 1844 | "id": "", 1845 | "comments": [], 1846 | "thumbnailSrc": "", 1847 | "musicSrc": "", 1848 | "hidden": true, 1849 | "boost": 0, 1850 | "updated": 1441054921814, 1851 | "authorType": "ByteUser", 1852 | "deleted": false, 1853 | "stickersCount": 0, 1854 | "createdString": "1441054115094", 1855 | "favCount": 0, 1856 | "name": "", 1857 | "thumbnails": { 1858 | "default": { 1859 | "url": "", 1860 | "id": "" 1861 | } 1862 | }, 1863 | "package": {""}, 1864 | "ownedByUser": true, 1865 | "created": 1441054115094, 1866 | "caption": "", 1867 | "updatedString": "1441054921814", 1868 | "commentsCount": 0 1869 | } 1870 | }, 1871 | "success": 1 1872 | } 1873 | ``` 1874 | 1875 | #### Error States 1876 | 1877 | | Code | Message | 1878 | | :---: | :--- | 1879 | | 1006 | Generic Permissions Error | 1880 | | 1011 | Unique hashid generation failed | 1881 | | 1012 | Invalid name | 1882 | | 1810 | Post name is unavailable | 1883 | | 1811 | Valuable names are limited daily per user | 1884 | | 1812 | Invalid package | 1885 | 1886 | 1887 | ### **DELETE** `/posts/id/` (requires authentication header) 1888 | 1889 | The `DELETE /posts/id/` endpoint deletes a Byte by ID. 1890 | 1891 | #### Sample Query 1892 | 1893 | ```bash 1894 | curl -X DELETE -H "Authorization: Bearer " -H "Accept: application/json" https://api.byte.co/v1/posts/id/ 1895 | ``` 1896 | 1897 | #### Sample Response 1898 | 1899 | ```json 1900 | { 1901 | "data": "success", 1902 | "success": 1 1903 | } 1904 | ``` 1905 | 1906 | #### Error States 1907 | 1908 | | Code | Message | 1909 | | :---: | :--- | 1910 | | 1107 | User permissions error | 1911 | 1912 | 1913 | 1914 | ## Computers 1915 | 1916 | Computers appear in the Byte client and provide an extended creator feature set for the user. 1917 | 1918 | | Method | Endpoint | Description | 1919 | | :---: | :--- | :--- | 1920 | | `GET` | [`/computers`](#get-computers) | Returns a list of all computers | 1921 | | `GET` | [`/computers/featured`](#get-computersfeatured) | Returns a list of featured computers | 1922 | | `GET` | [`/computers/installed`](#get-computersinstalled-requires-authentication-header) | Returns a list of the computers installed by a user | 1923 | | `POST` | [`/computers//install`](#post-computersstringcomputer_idinstall-requires-authentication-header) | Installs a computer by ID for the authenticated user | 1924 | | `DELETE` | [`/computers//install`](#delete-computersstringcomputer_idinstall-requires-authentication-header) | Uninstalls a computer by ID for the authenticated user | 1925 | 1926 | 1927 | ### **GET** `/computers` 1928 | 1929 | The `GET /computers` endpoint returns a list of all computers. 1930 | 1931 | Optional query params: 1932 | 1933 | * `alphabeticalSort`: `Boolean` (default `True`). If set to `False`, returns custom sorting defined by Byte. 1934 | 1935 | #### Sample Query 1936 | 1937 | ```bash 1938 | curl -X GET -H "Accept:application/json" https://api.byte.co/v1/computers 1939 | ``` 1940 | 1941 | #### Sample Response 1942 | 1943 | ```json 1944 | { 1945 | "data": [ 1946 | { 1947 | "id": "", 1948 | "name": "Gifs", 1949 | "endpoint": "http://computers.byte.co/computers/gifs", 1950 | "description": "Giphy (Stickers + Gifs)" 1951 | } 1952 | ], 1953 | "success": 1 1954 | } 1955 | ``` 1956 | 1957 | 1958 | ### **GET** `/computers/featured` 1959 | 1960 | The `GET /computers/featured` endpoint returns a list of featured computers. 1961 | 1962 | #### Sample Query 1963 | 1964 | ```bash 1965 | curl -X GET -H "Accept:application/json" https://api.byte.co/v1/computers/featured 1966 | ``` 1967 | 1968 | #### Sample Response 1969 | 1970 | ```json 1971 | { 1972 | "data": [ 1973 | { 1974 | "id": "", 1975 | "name": "Gifs", 1976 | "endpoint": "http://computers.byte.co/computers/gifs", 1977 | "description": "Giphy (Stickers + Gifs)" 1978 | } 1979 | ], 1980 | "success": 1 1981 | } 1982 | ``` 1983 | 1984 | 1985 | ### **GET** `/computers/installed` (requires authentication header) 1986 | 1987 | The `GET /computers/installed` endpoint returns a list of the computers installed by a user. 1988 | 1989 | #### Sample Query 1990 | 1991 | ```bash 1992 | curl -X GET -H "Authorization: Bearer " -H "Accept:application/json" https://api.byte.co/v1/computers/installed 1993 | ``` 1994 | 1995 | #### Sample Response 1996 | 1997 | ```json 1998 | { 1999 | "data": [ 2000 | { 2001 | "id": "", 2002 | "name": "Gifs", 2003 | "endpoint": "http://computers.byte.co/computers/gifs", 2004 | "description": "Giphy (Stickers + Gifs)" 2005 | } 2006 | ], 2007 | "success": 1 2008 | } 2009 | ``` 2010 | 2011 | 2012 | ### **POST** `/computers//install` (requires authentication header) 2013 | 2014 | The `POST /computers//install` endpoint installs a computer by ID for the authenticated user. 2015 | 2016 | #### Sample Query 2017 | 2018 | ```bash 2019 | curl -X POST -H "Authorization: Bearer " -H "Content-Type:application/json" -H "Accept:application/json" https://api.byte.co/v1/computers//install -d '{}' 2020 | ``` 2021 | 2022 | #### Sample Response 2023 | 2024 | ```json 2025 | { 2026 | "data": {}, 2027 | "success": 1 2028 | } 2029 | ``` 2030 | 2031 | 2032 | ### **DELETE** `/computers//install` (requires authentication header) 2033 | 2034 | The `DELETE /computers//install` endpoint uninstalls a computer by ID for the authenticated user. 2035 | 2036 | #### Sample Query 2037 | 2038 | ```bash 2039 | curl -X DELETE -H "Authorization: Bearer " -H "Accept:application/json" https://api.byte.co/v1/computers//install 2040 | ``` 2041 | 2042 | #### Sample Response 2043 | 2044 | ```json 2045 | { 2046 | "data": {}, 2047 | "success": 1 2048 | } 2049 | ``` 2050 | -------------------------------------------------------------------------------- /assets/byte-1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/assets/byte-1.jpeg -------------------------------------------------------------------------------- /assets/byte-2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/assets/byte-2.jpeg -------------------------------------------------------------------------------- /assets/byte-3.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/assets/byte-3.jpeg -------------------------------------------------------------------------------- /assets/byte-4.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/assets/byte-4.jpeg -------------------------------------------------------------------------------- /bff.md: -------------------------------------------------------------------------------- 1 | # bff 1.1 😘 2 | 3 | bff (**B**yte **F**ile **F**ormat) is the format used by software to render or publish Bytes. A bff document contains plaintext JSON that describes all of the objects and instructions that make up a Byte. 4 | 5 | ##Overview 6 | 7 | There are 3 top level properties in a bff document: 8 | 9 | - `version` a string identifier that versions the document 10 | - `background` an array that describes the background color of the Byte 11 | - `objects` an array of objects that make up the Byte 12 | 13 | ##Rendering 14 | 15 | The bff stage dimensions are always **324x570** points. 16 | 17 | Objects in a bff are rendered from back-to-front, starting with the `background`, followed by the first item in the `objects` array, and so on. 18 | 19 | Importantly, **the coordinate space in a bff is top-left aligned**. 20 | 21 | ``` 22 | (0, 0) -----------> (324, 0) 23 | | 24 | | 25 | | 26 | | 27 | | 28 | | 29 | V 30 | (0, 570) 31 | ``` 32 | ##Version 33 | 34 | The format of the `version` property is `"1.1"`. 35 | 36 | Versions are incremented with the following rules: 37 | 38 | Given `"MAJOR.MINOR"`, we increment the 39 | - MAJOR version when changes are made that are incompatible with with older renderers 40 | - MINOR version when functionality is added in a backwards-compatible manner 41 | 42 | 🚨 **A bff must specify a version.** 43 | 44 | ##Background 45 | 46 | The format of the `background` property is `[R, G, B, A]`, where valid color values are `0.0` to `1.0`. The property can also be two-dimensional (e.g. `[[R, G, B, A], [R, G, B, A]]`) to render a gradient background. If no background is specified, a default of `[1.0, 1.0, 1.0, 1.0]` is used. 47 | 48 | ##Objects 49 | 50 | Objects make up most of a bff and are contained in the `objects` array. 51 | 52 | All objects in a bff can have these properties: 53 | 54 | name | description | type 55 | --- | --- | --- | --- 56 | `type` | **Required**. The type of object (e.g. text, video). | String 57 | `frame` | **Required**. Position and size of the object.
Format is `[X, Y, WIDTH, HEIGHT]`. | Array of Floats 58 | `name` | A unique name or ID for the object. Case sensitive. | String 59 | `transform` | The top two rows of a 3x3 affine transformation matrix for rotation, scaling, translation. Applied **after** the `frame` is set.
Format is `[[A, B], [C, D], [TX, TY]]`. | Array of Arrays of Floats 60 | `opacity` | The alpha value of the object.
Valid values are `0.0` to `1.0` | Float 61 | `effects` | Animation effects that are applied to the object.
See [Effects](#effects) for possible values. | Array of Strings 62 | `originalSrc` | Optional web url linking to the original source of the object. Example: http://cg-horses.tumblr.com/post/44175751464 | String 63 | 64 | Object `type` values: 65 | - [paragraph](#paragraph) 66 | - [text](#text) 67 | - [link](#link) 68 | - [image](#image) 69 | - [graphic](#graphic) 70 | - [gif](#gif) 71 | - [video](#video) 72 | - [music](#music) 73 | 74 | ####Paragraph 75 | **type:** `paragraph` 76 | 77 | The Paragraph object renders text that flows and automatically wraps inside the `frame`. Paragraphs are best used to render text that is longer than 1-3 words. 78 | 79 | name | description | type | default 80 | :--- | :--- | :--- | :--- 81 | `text` | **Required**. The text to render. Cannot be purely whitespace. | String 82 | `color` | A color to render the text.
Format is `[R, G, B, A]`, where valid color values are `0.0` to `1.0`. | Array of Floats | `[0, 0, 0, 1]` 83 | `style` | A style to render the text.
Valid values are `sans` and `serif`. | String | `sans` 84 | `size` | Point size to render the text. Must be greater than 0. | Float | `17.0` 85 | `alignment` | Text alignment to render the text.
Valid values are `left`, `center`, `right`. | String | `left` 86 | `attributes` | Describes attributes to apply to the text.
Format is `[{"type": "bold", "range": [startIndex, length]}, {...}, {...}]`, where `type` can be `bold`, `italic`, or `bold-italic`. | Array of Dictionaries 87 | 88 | ####Text 89 | **type:** `text` 90 | 91 | Unlike the Paragraph object, **the Text object renders text that dynamically changes size** to fill its frame. Depending on their configuration, Text objects can either wrap based on rules set by the renderer, or not wrap at all. Text objects are always centered. 92 | 93 | 🚨 **Text objects are best used to render text between 1 and 3 words.** 94 | 95 | name | description | type | default 96 | :--- | :--- | :--- | :--- 97 | `text` | **Required**. The text to render. Cannot be purely whitespace. | String 98 | `color` | A color to render the text.
Format is `[R, G, B, A]`, where valid color values are `0.0` to `1.0`. | Array of Floats | `[0, 0, 0, 1]` 99 | `style` | A style to render the text.
Valid values are listed under the [Text fonts](#text-1). | String | `sans` 100 | `word-wrap` | If `auto`, wrapping will be determined by the client. If `manual`, text will only wrap where line breaks are encountered. It is preferable to specify a `manual` property and provide manual linebreaks so that wrapping is consistent across different renderers. | String | `auto` 101 | `padding` | The padding (if any) to apply to the inside of the frame while dynamically sizing the text to fit. Must be greater than or equal to 0. | Float | `20.0` 102 | ~~`alignment`~~ | **Not supported**. Text objects are always centered. 103 | 104 | ####Link 105 | **type:** `link` 106 | 107 | Links are pressable objects that redirect the viewer to other Bytes or websites. 108 | 109 | name | description | type | default 110 | :--- | :--- | :--- | :--- 111 | `url` | **Required**. The URL to redirect to.
Both `byte://` and `http://` URL schemes are supported.
To redirect to a Byte by ID (rather than name), use `byte://byte.{BYTE_ID}`. | String 112 | `title` | The title to display on the link. | String 113 | `color` | A color to render the link.
Format is `[R, G, B, A]`, where valid color values are `0.0` to `1.0`. | Array of Floats | `[0, 0, 0, 1]` 114 | `style` | A style to render the link.
Valid values are `sans` and `serif`. | String | `sans` 115 | `description` | A description of the content behind the link. | String 116 | ~~`alignment`~~ | **Not supported**. Link titles are always centered. 117 | 118 | ####Image 119 | **type:** `image` 120 | 121 | Images are inline PNG, JPEG, or BMP files. 122 | 123 | name | description | type | default 124 | :--- | :--- | :--- | :--- 125 | `src` | **Required**. The URL for the image asset. Any URL on the web is valid. After a Byte is published, we may point to an internally cached version of the image in order to help performance. | String 126 | `scaleMode` | A rule describing how the image should be resized inside its `frame`.
Valid values are `fit` and `fill`. | String | `fill` 127 | 128 | ####Graphic 129 | **type:** `graphic` 130 | 131 | Graphics are monochromatic PNG files that can dynamically change color. 132 | 133 | name | description | type | default 134 | :--- | :--- | :--- | :--- 135 | `src` | **Required**. The URL for the PNG file. Any URL on the web is valid. After a Byte is published, we may point to an internally cached version of the image in order to help performance. | String 136 | `color` | A color to fill the graphic with.
Format is `[R, G, B, A]`, where valid color values are `0.0` to `1.0`. | Array of Floats | `[0, 0, 0, 1]` 137 | ~~`scaleMode`~~ | **Not supported**. Graphics always scale to fit to their `frame`. 138 | 139 | ####Gif 140 | **type:** `gif` 141 | 142 | ![](http://i.giphy.com/sjuPRMd7ithh6.gif) 143 | 144 | name | description | type | default 145 | :--- | :--- | :--- | :--- 146 | `src` | **Required**. The URL for the GIF file. Any URL on the web is valid. After a Byte is published, we may point to an internally cached version of the GIF in order to help performance. | String 147 | `scaleMode` | A rule describing how the GIF should be resized inside its `frame`.
Valid values are `fit` and `fill`. | String | `fit` 148 | 149 | ####Video 150 | **type:** `video` 151 | 152 | Videos are inline MP4 files. Videos **play automatically** and **loop on completion**. Videos should be limited to 10 seconds or less. 153 | 154 | name | description | type | default 155 | :--- | :--- | :--- | :--- 156 | `src` | **Required**. The URL to the MP4. Any URL on the web is valid. After a Byte is published, we may point to an internally cached version of the MP4 in order to help performance. | String 157 | `muted` | Indicates whether or not the video should play sound | Boolean | `true` 158 | 159 | ####Music 160 | **type:** `music` 161 | 162 | Music is a MIDI-esque instruction set that is played by a built-in sequencer using the Byte soundfont. Music **plays automatically** and **loops on completion**. A speaker graphic is rendered at the object's `frame`. 163 | 164 | 🎹 **The Byte soundfont is included in this repository (`/Soundfont/Byte.sf`) for convenience.** 165 | 166 | 🚨 **A bff can contain only one music object.** 167 | 168 | name | description | type | default 169 | :--- | :--- | :--- | :--- 170 | `bpm` | **Required**. The sequences's beats-per-minute. Must be greater than 0. | Integer 171 | `length` | **Required**. The length of the sequence, in bars.
Valid values are 2-16. Must be a multiple of 2.
| Integer 172 | `instructions` | **Required**. An array of Music Instructions for the sequence. | Array of Music Instructions 173 | 174 | #####Music Instructions 175 | 176 | Music `instructions` are an array of **Beats**, which in turn are an array of **Hits**. The length of `instructions` (the number of **Beats**) must be at least `(length * 4)`. 177 | 178 | ###### Beats 179 | 180 | Beats are arrays which contain a variable number of hits. The position of a beat inside the `instructions` array determines which point in the sequence's timeline the beat and its hits correspond to. All time is in 4:4. For example, a beat at `instructions[3]` represents the final beat of the first bar of the sequence. Beats themselves do not specify the time at which sound is played (see Hits below), but it is important that they are organized properly because they are used to buffer their corresponding hits. 181 | 182 | ###### Hits 183 | 184 | Hits are the notes and drums inside a beat. Each hit is an object with the following properties: 185 | 186 | name | description | type 187 | :--- | :--- | :--- | :--- 188 | `time` | The time offset (in bars) in the sequence's timeline to play the hit. Can be subdivided to create half, quarter, 8th, 16th, or 32nd notes. Must be greater than or equal to 0. | Float 189 | `type` | Specifies the type of hit, where `0 = instrument` and `1 = drum`. | Integer 190 | `bank` | If type is `0`, specifies the type of instrument to play. If type is `1`, this value should always be `"drums"`. | String 191 | `note` | If type is `0`, the value is in the format `"B/3"` and specifies the note and octave to play. To play a sharp note, a hash can be added (e.g. `"C#/3"`). Flat notes are not supported. Valid values are `A/-1` to `G/8`.

If the type is `1`, the value is in the format `"kick"` and specifies the type of drum to play. | String 192 | `velo` | Specifies the velocity (typically volume) at which to play the hit, from `0` (none) to `127` (full). | Integer 193 | `duration` | The duration (in bars) to play the note. Unsupported in current renderers and should be set to `1`. Must be greater than 0. | Float 194 | 195 | **Supported bank names:** 196 | `"bleep"`, `"meow"`, `"bass"`, `"ping"`, `"string"`, `"reso"`, `"arp"`, `"bark"`, `"mono1"`, `"mono2"`, `"mono3"`, `"funk"`, `"sax"`, `"bell"`, `"roboto"`, `"do"` 197 | 198 | These banks correspond to sound banks `0` to `15` in the Byte Soundfont, except for `drums`, which corresponds to sound bank `127`. 199 | 200 | **Supported drum hit names:** 201 | `"Thump"`, `"Kick"`, `"Glitch"`, `"Snare"`, `"Clap"`, `"Tambourine"`, `"Whistle"`, `"Hat"`, `"Block"`, `"Stick"`, `"Shaker"`, `"Crash"`, `"Tom"`, `"Conga"`, `"Cowbell"`, `"Yeah"` 202 | 203 | These hits correspond to MIDI notes `35` to `50` in the Byte Soundfont's `drums` bank. 204 | 205 | ##Effects 206 | Effects are discrete animations that can be applied to an object and looped indefinitely. An object can have zero or more effects, and effects can be combined to create new effects (e.g. combining `"sin"` and `"cos"` creates a circular movement). 207 | 208 | Effects that are currently supported are: 209 | 210 | Animation `id` | | Description 211 | :--------------|:-------|:----------- 212 | `sin` | Sway vertically | Makes an object sway in a vertical pattern 213 | `cos` | Sway horizontally | Makes an object sway in a horizontal pattern 214 | `wave` | Wave | Makes an object wave left and right 215 | `rotate` | Rotate clockwise | Makes an object rotate clockwise 216 | `soon` | Soon Zoom | Zooms an object ominously 217 | `fireworks` | Fireworks | Emits numerous copies of thing, like fireworks 218 | 219 | *Rules and pseudo-code to replicate each `effect` will be published soon.* 220 | 221 | ##Fonts & Typefaces 222 | Rather than explicitly defining fonts, objects that render text contain a `style` property. It's up to each particular renderer to define which font it will use to interpret a given style. 223 | 224 | Style | Font Guidelines 225 | :-------------|:--------- 226 | `sans` | Sans-serif 227 | `serif` | Serif 228 | `mono` | Fixed-width, sans-serif, non-pixel 229 | `eightbit` | Fixed-width, sans-serif, pixel 230 | `punchout` | Inverted (letter are "punched out" of blocks), sans-serif 231 | `cursive` | Script 232 | `poster` | Sans-serif, heavy, tall/narrow 233 | `tape` | All caps, sans-serif, wide/short 234 | `book`| All caps, sans-serif, appears handmade or slightly retro 235 | 236 | #### Royalty Free Font Recommendations 237 | Below are some suggested royalty free fonts that work well in renderers. For convenience, the font files are also included in this repository (`/Fonts/*`). 238 | 239 | Style | Info | URL | License 240 | :---|:---|:---|:--- 241 | `sans` | **Aileron** | [URL](http://dotcolon.net/font/aileron/) | CC0 1.0 Universal (CC0 1.0) Public Domain 242 | `serif` | **Heurestica** | [URL](http://www.ctan.org/tex-archive/fonts/heuristica/) | SIL Open Font License (OFL) 243 | `mono` | **Roboto Mono 400** | [URL](https://www.google.com/fonts/specimen/Roboto+Mono) | Apache License 2.0 244 | `punchout` | **Labeler** | Custom font by Byte Inc. Included in this repo. | Public Domain 245 | `eightbit` | **Pixel Grotesk** | Custom font by Byte Inc. Included in this repo. | Public Domain 246 | `cursive` | **League Script** | [URL](https://www.theleagueofmoveabletype.com/league-script-number-one) | SIL Open Font License (OFL) 247 | `poster` | **Pressuru** | [URL](http://abstrkt.ru/index.php?p=freefonts) | “You are totally free to use the typefaces listed below any way you like.” 248 | `tape` | **Alfphabet IV** | [URL](http://openfontlibrary.org/en/font/alfphabet) | SIL Open Font License (OFL) 249 | `book` | **st32k** | [URL](http://www.abstractfonts.com/font/15015) | SIL Open Font License (OFL) 250 | 251 | #### Fonts used by Byte, Inc. 252 | In case it's helpful, below are the fonts used in our official Byte renderers. 253 | 254 | #####Paragraph 255 | Ranges of paragraph text can be bold, italic, both, or regular. 256 | 257 | Style | Attribute | Font 258 | :-------------|:---------------|:---------- 259 | `sans` | None | GraphikApp-Regular 260 | `sans` | `italic` | GraphikApp-RegularItalic 261 | `sans` | `bold` | GraphikApp-Semibold 262 | `sans` | `bold-italic` | GraphikApp-SemiboldItalic 263 | `serif` | None | Tiempos 264 | `serif` | `italic` | Tiempos-Italic 265 | `serif` | `bold` | TiemposSemibold 266 | `serif` | `bold-italic` | TiemposSemibold-Italic 267 | 268 | #####Text 269 | Style | Font 270 | :-------------|:--------- 271 | `sans` | GraphikApp-Semibold 272 | `mono` | GT Cinetype 273 | `punchout` | Labeler 274 | `eightbit` | Pixel Grotesk 275 | `cursive` | KGTheFighter 276 | `poster` | Druk-Bold 277 | `tape` | Tapeworm-Regular 278 | `book`| St32k 279 | `serif` | TiemposSemibold 280 | 281 | #####Link 282 | Style | Font 283 | :-------------|:--------- 284 | `sans` | GraphikApp-Semibold 285 | `serif` | TiemposSemibold 286 | 287 | 288 | ##Changelog 289 | 290 | Version 1.1: 291 | * Added optional `originalSrc` property to objects 292 | -------------------------------------------------------------------------------- /objects.md: -------------------------------------------------------------------------------- 1 | # Byte API Objects 2 | 3 | This documents describes the primary types of objects returned by the Byte API. 4 | 5 | **Note About Summary Fields:** 6 | Summary fields are a limited set of fields returned when the object is included inside another object. 7 | For example, when a user object is included inside a comment object, only the summary fields for that user are returned. 8 | In some API endpoints the caller can specify whether they want summary results or full results. 9 | 10 | ## Post 11 | 12 | A post is a single Byte. 13 | The contents used to display the Byte are in the field named `package`, which contains a JSON string that conforms to the BFF guidelines. 14 | The other fields contain metadata about the Byte. 15 | 16 | #### Fields 17 | 18 | | Field | Type | Summary | Description | 19 | | :---: | :---: | :---: |:--- | 20 | | `id` | String | Yes | Unique identifier for the Byte. | 21 | | `name` | String | Yes | Unique name for the Byte. Contains no spaces. | 22 | | `caption` | String | Yes | Freeform description for the Byte. Can include unicode. | 23 | | `author` | User Object | Yes | Author of this Byte. Not included for incognito Bytes. | 24 | | `previewUrl` | String | Yes | URL to a resizable thumbnail image for the Byte. | 25 | | `thumbnailSrc` | String | Yes | URL to a non-resizable thumbnail image for the Byte. | 26 | | `musicSrc` | String | | Url to an MP3 file of the music for the Byte, if it has music. | 27 | | `package` | String | | JSON string containing the BFF for this Byte. | 28 | | `comments` | Array | | Array of comments on the Byte. | 29 | | `ownedByUser` | Boolean | | Whether the currently logged in user owns this Byte. Only included for authed requests. | 30 | | `profile` | Boolean | Yes | Whether this Byte is the featured Byte for the author's profile. | 31 | | `stickersCount` | Integer | Yes | Number of sticker comments on this Byte. | 32 | | `commentsCount` | Integer | Yes | Number of text commetns on this Byte. | 33 | | `lookCount` | Integer | Yes | Number of looks on this Byte. | 34 | | `updated` | Integer | Yes | Millisecond-based Unix timestamp for when this Byte was updated. | 35 | | `updatedString` | String | Yes | Millisecond-based Unix timestamp for when this Byte was updated. Useful in 32 bit environments where the integer overflows. | 36 | | `created` | Integer | Yes | Millisecond-based Unix timestamp for when this Byte was created. | 37 | | `createdString` | String | Yes | Millisecond-based Unix timestamp for when this Byte was created. Useful in 32 bit environments where the integer overflows. | 38 | 39 | 40 | #### Sample Object 41 | 42 | ```json 43 | { 44 | "id": "", 45 | "previewUrl": "", 46 | "comments": [ 47 | { 48 | "author": null, 49 | "point": { 50 | "y": 297.04230000000001, 51 | "x": 192.88130000000001 52 | }, 53 | "sticker": "StickerThumbsUp", 54 | "created": 1439879220892, 55 | "createdString": "1439879220892", 56 | "postId": "", 57 | "type": "sticker", 58 | "id": "" 59 | } 60 | ], 61 | "thumbnailSrc": "", 62 | "musicSrc": "", 63 | "hidden": false, 64 | "updated": 1441050296279, 65 | "authorType": "ByteUser", 66 | "stickersCount": 11, 67 | "lookCount": 284, 68 | "createdString": "1439504831994", 69 | "name": "", 70 | "package": {""}, 71 | "ownedByUser": true, 72 | "created": 1439504831994, 73 | "caption": "", 74 | "updatedString": "1441050296279", 75 | "commentsCount": 1 76 | } 77 | ``` 78 | 79 | 80 | ## User 81 | 82 | Most API's have users and ours does too! 83 | 84 | When included in another object only summary fields are included (`id`, `username`, `profilePhoto`). 85 | Not all users have a username. Those that don't will return an empty string as their username. 86 | 87 | 88 | #### Fields 89 | 90 | | Field | Type | Summary | Description | 91 | | :---: | :---: | :---: | :--- | 92 | | `id` | String | Yes | Unique identifier for this user. | 93 | | `username` | String | Yes | Unique name for this user. Empty string if user has not claimed a username. | 94 | | `profilePhoto` | String | Yes | URL to a resizable thumbnail image for the user's profile photo. | 95 | | `created` | Integer | | Millisecond-based Unix timestamp for when this user was created. | 96 | | `createdString` | String | | Millisecond-based Unix timestamp for when this user was created. Useful in 32 bit environments where the integer overflows. | 97 | 98 | 99 | 100 | #### Sample Object 101 | 102 | ```json 103 | { 104 | "id": "", 105 | "username": "", 106 | "profilePhoto": "", 107 | "created": 1439504831994, 108 | "createdString": "1439504831994" 109 | } 110 | ``` 111 | 112 | 113 | ## Comment 114 | 115 | Byte comments are unique because they have a position, specified as X and Y coordinates. 116 | Byte comments can be stickers or regular text comments. Stickers are chosen from the list of Byte stickers. 117 | For the list of stickers see the documentation of the comment creation endpoint. 118 | 119 | 120 | 121 | #### Fields 122 | 123 | | Field | Type | Description | 124 | | :---: | :---: | :--- | 125 | | `id` | String | Unique identifier for this comment. | 126 | | `postId` | String | Unique identifier for the post this comment belongs to. | 127 | | `author` | User | Author of this comment. Note that older comments may not have an author. | 128 | | `point` | Dictionary | Location of this comment as a dictionary containing x and y keys with integer values. | 129 | | `type` | String | `sticker` or `text`. | 130 | | `sticker` | String | Name of the sticker used for this comment. Only for sticker-type comments. | 131 | | `body` | String | Text for this comment. Only for text-type comments. | 132 | | `created` | Integer | Millisecond-based Unix timestamp for when this comment was created. | 133 | | `createdString` | String | Millisecond-based Unix timestamp for when this comment was created. Useful in 32 bit environments where the integer overflows. | 134 | 135 | #### Sample Objects 136 | 137 | Text comment: 138 | ```json 139 | { 140 | "body": "Looks good!", 141 | "author": "", 142 | "point": { 143 | "y": 261.92649999999998, 144 | "x": 219.45599999999999 145 | }, 146 | "created": 1446681611448, 147 | "createdString": "1446681611448", 148 | "postId": "xyz123", 149 | "type": "text", 150 | "id": "abc987" 151 | } 152 | ``` 153 | 154 | Sticker comment: 155 | ```json 156 | { 157 | "sticker": "StickerFrog", 158 | "author": "", 159 | "point": { 160 | "y": 211.93649999999998, 161 | "x": 218.32599999999999 162 | }, 163 | "created": 1446681611448, 164 | "createdString": "1446681611448", 165 | "postId": "xyz123", 166 | "type": "sticker", 167 | "id": "dof832" 168 | } 169 | ``` 170 | -------------------------------------------------------------------------------- /resources/Fonts/book/st32k/FONTLOG.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/book/st32k/FONTLOG.txt -------------------------------------------------------------------------------- /resources/Fonts/book/st32k/st32k.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/book/st32k/st32k.ttf -------------------------------------------------------------------------------- /resources/Fonts/cursive/leaguescript/DESCRIPTION.en_us.html: -------------------------------------------------------------------------------- 1 |

This ain’t no Lucida. League Script is a modern, coquettish script font that sits somewhere between your high school girlfriend’s love notes and handwritten letters from the ’20s. Designed for the League of Moveable Type, it includes ligatures and will act as the framework for future script designs.

-------------------------------------------------------------------------------- /resources/Fonts/cursive/leaguescript/LeagueScript.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/cursive/leaguescript/LeagueScript.ttf -------------------------------------------------------------------------------- /resources/Fonts/cursive/leaguescript/METADATA.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "League Script", 3 | "designer": "Haley Fiege", 4 | "license": "OFL", 5 | "visibility": "External", 6 | "category": "Handwriting", 7 | "size": 39623, 8 | "fonts": [ 9 | { 10 | "name": "League Script", 11 | "style": "normal", 12 | "weight": 400, 13 | "filename": "LeagueScript.ttf", 14 | "postScriptName": "LeagueScript", 15 | "fullName": "League Script", 16 | "copyright": "Copyright (c) 2010, Haley Fiege (haley@kingdomofawesome.com)" 17 | } 18 | ], 19 | "subsets": [ 20 | "latin", 21 | "menu" 22 | ], 23 | "dateAdded": "2011-03-09" 24 | } 25 | -------------------------------------------------------------------------------- /resources/Fonts/cursive/leaguescript/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010, Haley Fiege (haley@kingdomofawesome.com) 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. (with no Reserved Font Name) 4 | This license is copied below, and is also available with a FAQ at: 5 | http://scripts.sil.org/OFL 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Original Version" refers to the collection of Font Software components as 34 | distributed by the Copyright Holder(s). 35 | 36 | "Modified Version" refers to any derivative made by adding to, deleting, 37 | or substituting -- in part or in whole -- any of the components of the 38 | Original Version, by changing formats or by porting the Font Software to a 39 | new environment. 40 | 41 | "Author" refers to any designer, engineer, programmer, technical 42 | writer or other person who contributed to the Font Software. 43 | 44 | PERMISSION & CONDITIONS 45 | Permission is hereby granted, free of charge, to any person obtaining 46 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 47 | redistribute, and sell modified and unmodified copies of the Font 48 | Software, subject to the following conditions: 49 | 50 | 1) Neither the Font Software nor any of its individual components, 51 | in Original or Modified Versions, may be sold by itself. 52 | 53 | 2) Original or Modified Versions of the Font Software may be bundled, 54 | redistributed and/or sold with any software, provided that each copy 55 | contains the above copyright notice and this license. These can be 56 | included either as stand-alone text files, human-readable headers or 57 | in the appropriate machine-readable metadata fields within text or 58 | binary files as long as those fields can be easily viewed by the user. 59 | 60 | 3) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 61 | Software shall not be used to promote, endorse or advertise any 62 | Modified Version, except to acknowledge the contribution(s) of the 63 | Copyright Holder(s) and the Author(s) or with their explicit written 64 | permission. 65 | 66 | 4) The Font Software, modified or unmodified, in part or in whole, 67 | must be distributed entirely under this license, and must not be 68 | distributed under any other license. The requirement for fonts to 69 | remain under this license does not apply to any document created 70 | using the Font Software. 71 | 72 | TERMINATION 73 | This license becomes null and void if any of the above conditions are 74 | not met. 75 | 76 | DISCLAIMER 77 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 78 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 79 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 80 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 81 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 82 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 83 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 84 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 85 | OTHER DEALINGS IN THE FONT SOFTWARE. 86 | -------------------------------------------------------------------------------- /resources/Fonts/eightbit/PixelGrotesk-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/eightbit/PixelGrotesk-Regular.ttf -------------------------------------------------------------------------------- /resources/Fonts/mono/DESCRIPTION.en_us.html: -------------------------------------------------------------------------------- 1 |

2 | Roboto Mono is a monospaced addition to the Roboto type family. 3 | Like the other members of the Roboto family, the fonts are optimized for readability on screens across a wide variety of devices and reading environments. 4 | While the monospaced version is related to its variable width cousin, it doesn’t hesitate to change forms to better fit the constraints of a monospaced environment. 5 | For example, narrow glyphs like ‘I’, ‘l’ and ‘i’ have added serifs for more even texture while wider glyphs are adjusted for weight. 6 | Curved caps like ‘C’ and ‘O’ take on the straighter sides from Roboto Condensed. 7 |

8 | 9 |

10 | Special consideration is given to glyphs important for reading and writing software source code. 11 | Letters with similar shapes are easy to tell apart. 12 | Digit ‘1’, lowercase ‘l’ and capital ‘I’ are easily differentiated as are zero and the letter ‘O’. 13 | Punctuation important for code has also been considered. 14 | For example, the curly braces ‘{ }’ have exaggerated points to clearly differentiate them from parenthesis ‘( )’ and braces ‘[ ]’. 15 | Periods and commas are also exaggerated to identify them more quickly. 16 | The scale and weight of symbols commonly used as operators have also been optimized. 17 |

18 | -------------------------------------------------------------------------------- /resources/Fonts/mono/LICENSE.txt: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright [yyyy] [name of copyright owner] 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | -------------------------------------------------------------------------------- /resources/Fonts/mono/METADATA.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Roboto Mono", 3 | "designer": "Christian Robertson", 4 | "license": "Apache2", 5 | "visibility": "External", 6 | "category": "Monospace", 7 | "size": 51290, 8 | "fonts": [ 9 | { 10 | "name": "Roboto Mono", 11 | "postScriptName": "RobotoMono-Thin", 12 | "fullName": "Roboto Mono Thin", 13 | "style": "normal", 14 | "weight": 100, 15 | "filename": "RobotoMono-Thin.ttf", 16 | "copyright": "Copyright 2015 Google Inc. All Rights Reserved." 17 | }, 18 | { 19 | "name": "Roboto Mono", 20 | "postScriptName": "RobotoMono-ThinItalic", 21 | "fullName": "Roboto Mono Thin Italic", 22 | "style": "italic", 23 | "weight": 100, 24 | "filename": "RobotoMono-ThinItalic.ttf", 25 | "copyright": "Copyright 2015 Google Inc. All Rights Reserved." 26 | }, 27 | { 28 | "name": "Roboto Mono", 29 | "postScriptName": "RobotoMono-Light", 30 | "fullName": "Roboto Mono Light", 31 | "style": "normal", 32 | "weight": 300, 33 | "filename": "RobotoMono-Light.ttf", 34 | "copyright": "Copyright 2015 Google Inc. All Rights Reserved." 35 | }, 36 | { 37 | "name": "Roboto Mono", 38 | "postScriptName": "RobotoMono-LightItalic", 39 | "fullName": "Roboto Mono Light Italic", 40 | "style": "italic", 41 | "weight": 300, 42 | "filename": "RobotoMono-LightItalic.ttf", 43 | "copyright": "Copyright 2015 Google Inc. All Rights Reserved." 44 | }, 45 | { 46 | "name": "Roboto Mono", 47 | "postScriptName": "RobotoMono-Regular", 48 | "fullName": "Roboto Mono", 49 | "style": "normal", 50 | "weight": 400, 51 | "filename": "RobotoMono-Regular.ttf", 52 | "copyright": "Copyright 2015 Google Inc. All Rights Reserved." 53 | }, 54 | { 55 | "name": "Roboto Mono", 56 | "postScriptName": "RobotoMono-Italic", 57 | "fullName": "Roboto Mono Italic", 58 | "style": "italic", 59 | "weight": 400, 60 | "filename": "RobotoMono-Italic.ttf", 61 | "copyright": "Copyright 2015 Google Inc. All Rights Reserved." 62 | }, 63 | { 64 | "name": "Roboto Mono", 65 | "postScriptName": "RobotoMono-Medium", 66 | "fullName": "Roboto Mono Medium", 67 | "style": "normal", 68 | "weight": 500, 69 | "filename": "RobotoMono-Medium.ttf", 70 | "copyright": "Copyright 2015 Google Inc. All Rights Reserved." 71 | }, 72 | { 73 | "name": "Roboto Mono", 74 | "postScriptName": "RobotoMono-MediumItalic", 75 | "fullName": "Roboto Mono Medium Italic", 76 | "style": "italic", 77 | "weight": 500, 78 | "filename": "RobotoMono-MediumItalic.ttf", 79 | "copyright": "Copyright 2015 Google Inc. All Rights Reserved." 80 | }, 81 | { 82 | "name": "Roboto Mono", 83 | "postScriptName": "RobotoMono-Bold", 84 | "fullName": "Roboto Mono Bold", 85 | "style": "normal", 86 | "weight": 700, 87 | "filename": "RobotoMono-Bold.ttf", 88 | "copyright": "Copyright 2015 Google Inc. All Rights Reserved." 89 | }, 90 | { 91 | "name": "Roboto Mono", 92 | "postScriptName": "RobotoMono-BoldItalic", 93 | "fullName": "Roboto Mono Bold Italic", 94 | "style": "italic", 95 | "weight": 700, 96 | "filename": "RobotoMono-BoldItalic.ttf", 97 | "copyright": "Copyright 2015 Google Inc. All Rights Reserved." 98 | } 99 | ], 100 | "subsets": [ 101 | "cyrillic", 102 | "cyrillic-ext", 103 | "greek", 104 | "greek-ext", 105 | "latin", 106 | "latin-ext", 107 | "menu", 108 | "vietnamese" 109 | ], 110 | "dateAdded": "2015-05-13" 111 | } 112 | -------------------------------------------------------------------------------- /resources/Fonts/mono/RobotoMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/mono/RobotoMono-Regular.ttf -------------------------------------------------------------------------------- /resources/Fonts/poster/pressuru.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/poster/pressuru.otf -------------------------------------------------------------------------------- /resources/Fonts/punchout/Labeler-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/punchout/Labeler-Regular.otf -------------------------------------------------------------------------------- /resources/Fonts/sans/aileron/Aileron-Black.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/sans/aileron/Aileron-Black.otf -------------------------------------------------------------------------------- /resources/Fonts/sans/aileron/Aileron-BlackItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/sans/aileron/Aileron-BlackItalic.otf -------------------------------------------------------------------------------- /resources/Fonts/sans/aileron/Aileron-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/sans/aileron/Aileron-Bold.otf -------------------------------------------------------------------------------- /resources/Fonts/sans/aileron/Aileron-BoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/sans/aileron/Aileron-BoldItalic.otf -------------------------------------------------------------------------------- /resources/Fonts/sans/aileron/Aileron-Heavy.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/sans/aileron/Aileron-Heavy.otf -------------------------------------------------------------------------------- /resources/Fonts/sans/aileron/Aileron-HeavyItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/sans/aileron/Aileron-HeavyItalic.otf -------------------------------------------------------------------------------- /resources/Fonts/sans/aileron/Aileron-Italic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/sans/aileron/Aileron-Italic.otf -------------------------------------------------------------------------------- /resources/Fonts/sans/aileron/Aileron-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/sans/aileron/Aileron-Light.otf -------------------------------------------------------------------------------- /resources/Fonts/sans/aileron/Aileron-LightItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/sans/aileron/Aileron-LightItalic.otf -------------------------------------------------------------------------------- /resources/Fonts/sans/aileron/Aileron-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/sans/aileron/Aileron-Regular.otf -------------------------------------------------------------------------------- /resources/Fonts/sans/aileron/Aileron-SemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/sans/aileron/Aileron-SemiBold.otf -------------------------------------------------------------------------------- /resources/Fonts/sans/aileron/Aileron-SemiBoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/sans/aileron/Aileron-SemiBoldItalic.otf -------------------------------------------------------------------------------- /resources/Fonts/sans/aileron/Aileron-Thin.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/sans/aileron/Aileron-Thin.otf -------------------------------------------------------------------------------- /resources/Fonts/sans/aileron/Aileron-ThinItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/sans/aileron/Aileron-ThinItalic.otf -------------------------------------------------------------------------------- /resources/Fonts/sans/aileron/Aileron-UltraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/sans/aileron/Aileron-UltraLight.otf -------------------------------------------------------------------------------- /resources/Fonts/sans/aileron/Aileron-UltraLightItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/sans/aileron/Aileron-UltraLightItalic.otf -------------------------------------------------------------------------------- /resources/Fonts/serif/heuristica-otf-0.4.tar/FontLog.txt: -------------------------------------------------------------------------------- 1 | These fonts are based on Utopia font which was released by Adobe for TeX 2 | users group with following license: 3 | 4 | Adobe Systems Incorporated ("Adobe") hereby grants to the TeX Users 5 | Group and its members a nonexclusive, royalty-free, perpetual license to 6 | the typeface software for the Utopia Regular, Utopia Italic, Utopia Bold 7 | and Utopia bold Italic typefaces, including Adobe Type 1 font programs 8 | for each style (collectively, the "Software") as set forth below. 9 | 10 | Adobe grants the TeX Users Group a license under its copyrights, to use, 11 | reproduce, display and distribute the Software for any purpose and 12 | without fee provided that the following copyright notice appears in all 13 | whole and partial copies of the Software and provided that the following 14 | trademark symbol and attribution appear in all unmodified copies of the 15 | Software: 16 | 17 | Copyright 1989, 1991 Adobe Systems Incorporated. All rights reserved. 18 | (alternatively, @1989, 1991 Adobe Systems Incorporated. All rights reserved.) 19 | Utopia(R) 20 | Utopia is either a registered trademark or trademark of Adobe Systems 21 | Incorporated in the United States and/or other countries. Used under 22 | license. 23 | 24 | Adobe also grants to the TeX Users Group a license to modify the 25 | Software for any purpose and redistribute such modifications, for any 26 | purpose and royalty-free, provided that the modified Software shall not 27 | use the font name(s) or trademark(s), in whole or in part, unless 28 | explicit written permission is granted by Adobe. This restriction 29 | applies to all references stored in the Software for identification 30 | purposes, such as the font menu name and other font description 31 | fields. The TeX Users Group is also permitted to sublicense, and grant 32 | such sublicensees the right to further sublicense, any or all the 33 | foregoing rights through multiple tiers of distribution. The licenses 34 | granted herein are granted in perpetuity and may not be terminated by 35 | either party unless such termination is based on a breach of the terms 36 | and conditions herein stated. 37 | 38 | Adobe retains ownership of the copyright in the Software. The TeX Users 39 | Group agrees that Adobe and its suppliers are the sole and exclusive 40 | owners of all rights, title and interest, including all copyrights, 41 | patents, trademarks, trade names, trade secrets and other intellectual 42 | property rights in the Software. No title or ownership of the Software, 43 | any copies of the Software, or the patent, copyright, trade secret, 44 | trademark, trade name or other proprietary rights contained in the 45 | Software is transferred to the TeX Users Group. 46 | 47 | The Adobe trademarks shall not be used in advertising pertaining to the 48 | distribution of the Software without express prior permission from 49 | Adobe. Any such use shall be in accordance with the Adobe trademark 50 | guidelines, available on the Adobe website at 51 | http://www.adobe.com/misc/pdfs/TM GuideforThirdPartiesFinal.pdf. 52 | If any portion of the Software is changed, it cannot be marketed under 53 | Adobe's trademarks unless Adobe, in its sole discretion, approves by a 54 | prior writing the quality of the resulting implementation. 55 | 56 | The TeX Users Group shall have the right to evaluate the Software 57 | provided by Adobe. 58 | 59 | Then the TeX Users Group (TUG) gave all such rights, irrevocably and in 60 | perpetuity, to any and all interested parties. 61 | 62 | Heuristica fonts contains glyphs from Vntopia font family, 63 | http://vntex.sf.net which was released by Han The Thanh on 2006 64 | according to the conditions of the Adobe/TUG license agreement. 65 | 66 | Build and install instructions 67 | ============================== 68 | 69 | You need fontforge (http://fontforge.sourceforge.net/), xgridfit 70 | (http://xgridfit.sourceforge.net/) and font-helpers 71 | (http://code.google.com/p/font-helpers/ ) in order to build fonts from 72 | the sources. Also you should have GNU make and coreutils. At first you 73 | must unpack/copy files from font-helpers into the directory where *.sfd 74 | files are located. Then type 75 | 76 | make 77 | 78 | and truetype fonts will be produced. On systems with X.Org you may do 79 | 80 | make install 81 | 82 | as root to install fonts system-wide (/usr/share/fonts/TTF). Otherwise 83 | copy *.ttf files into ~/.fonts/ directory. Then run fc-cache if you have 84 | fontconfig. 85 | 86 | ChangeLog 87 | --------- 88 | 89 | 2011-02-15 Andrey V. Panov 90 | Added subscript, superscript and tabular oldstyle figures. 91 | Added more vulgar fractions. 92 | Added several extended Latin and Cyrillic characters. 93 | Version 0.4 is released. 94 | 95 | 2010-10-28 Andrey V. Panov 96 | Added small capitals (basic Latin and Cyrillic) in Regular. 97 | Added more phonetic characters to Regular. 98 | Version 0.3 is released. 99 | 100 | 2010-06-09 Andrey V. Panov 101 | Added several characters mostly for support of Polish and Romanian. 102 | Version 0.2.2 is released. 103 | 104 | 2010-02-15 Andrey V. Panov 105 | Tuned some kerning pairs in Cyrillic. 106 | Added U+211F, U+2123. 107 | Added LaTeX support. 108 | Manually instructed "g" in Regular. 109 | Version 0.2.1 is released. 110 | 111 | 2009-08-09 Andrey V. Panov 112 | Version 0.2 is released. 113 | 114 | 2009-08-08 Andrey V. Panov 115 | Added Cyrillic letters to support modern Abkhazian alphabet. 116 | Added "Euro". 117 | 118 | 2009-08-07 Andrey V. Panov 119 | Added kerning to Cyrillic. 120 | 121 | 2009-07-08 Andrey V. Panov 122 | Added old style kerning ('kern' table). 123 | 124 | 2009-03-21 Andrey V. Panov 125 | 126 | Some elements of truetype control value table are now modified 127 | with xgridfit. So build process requires ttx from fontutils and 128 | xgridfit. 129 | 130 | 2009-03-11 Andrey V. Panov 131 | 132 | Merged glyphs from Vntopia fonts of Han The Thanh with modifications for 133 | more condensed accents. 134 | Added U+494, U+495, U+4C7, U+4C8, U+512, U+513. 135 | Added several IPA charters to Regular. 136 | Updated scripts for producing fonts. 137 | 138 | 2009-01-25 Andrey V. Panov 139 | 140 | Fixed spacing of generated rotated glyphs in italic fonts. 141 | Added longs, u+268, esh, several extended Cyrillic letters. 142 | 143 | 2008-12-24 Andrey V. Panov 144 | 145 | Added more accents. 146 | 147 | 2008-12-07 Andrey V. Panov 148 | 149 | Added capital variants for "ring", "tilde". Generating script now builds 150 | a lot of accented Latin and Cyrillic glyphs and several IPA rotated 151 | symbols. 152 | 153 | 2008-11-25 Andrey V. Panov 154 | 155 | The first beta version (0.1) is released. 156 | -------------------------------------------------------------------------------- /resources/Fonts/serif/heuristica-otf-0.4.tar/Heuristica-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/serif/heuristica-otf-0.4.tar/Heuristica-Bold.otf -------------------------------------------------------------------------------- /resources/Fonts/serif/heuristica-otf-0.4.tar/Heuristica-BoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/serif/heuristica-otf-0.4.tar/Heuristica-BoldItalic.otf -------------------------------------------------------------------------------- /resources/Fonts/serif/heuristica-otf-0.4.tar/Heuristica-Italic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/serif/heuristica-otf-0.4.tar/Heuristica-Italic.otf -------------------------------------------------------------------------------- /resources/Fonts/serif/heuristica-otf-0.4.tar/Heuristica-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/serif/heuristica-otf-0.4.tar/Heuristica-Regular.otf -------------------------------------------------------------------------------- /resources/Fonts/tape/OSP_Alfphabet/Alfphabet-IV.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Fonts/tape/OSP_Alfphabet/Alfphabet-IV.ttf -------------------------------------------------------------------------------- /resources/Fonts/tape/OSP_Alfphabet/FONTLOG.txt: -------------------------------------------------------------------------------- 1 | 2 | FONTLOG for Alfphabet-IV 3 | ------------------- 4 | This file provides detailed information on the Alfphabet-IV font software. 5 | This information should be distributed along with the Alfphabet-IV fonts 6 | and any derivative works. 7 | 8 | Basic Font Information 9 | -------------------------- 10 | Copyright (c) 2007-2010, OSP (http://ospublish.constantvzw.org) 11 | The Alfphabet family is based on the Belgian road signage (1945-1975, originally from 3M system working for the Marshall plan after the end of the war). 12 | Alfphabet IV was redrawn by Pierre Huyghebaert and Ludi at Speculoos studio in 2007. 13 | 14 | Alfphabet-IV currently provides the following Unicode coverage: 15 | Basic Latin: 95/95 16 | Latin-1 Supplement: 60/96 17 | 18 | Information for Contributors 19 | ------------------------------ 20 | Copyright (C) 2007-2010 OSP (Pierre Huyghebaert and Ludivine Loiseau). 21 | 22 | This Font Software is Copyright (c) 2003-2006, Philipp H. Poll (http://linuxlibertine.sf.net/). 23 | All Rights Reserved. 24 | 25 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 26 | 27 | You should have received a copy of the license along with this Font Software (either in stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files). 28 | 29 | See the project website for the current trunk and the various branches: 30 | http://ospublish.constantvzw.org/foundry/alfphabet 31 | 32 | ChangeLog 33 | ---------- 34 | 35 | Acknowledgements 36 | ------------------------- 37 | If you make modifications be sure to add your name (N), email (E), web-address 38 | (W) and description (D). This list is sorted by last name in alphabetical 39 | order.) 40 | 41 | N: Ludivine Loiseau 42 | E: 43 | W: http://ospublish.constantvzw.org 44 | D: 45 | 46 | N: Pierre Huyghebaert, 47 | E: pierre@speculoos.com 48 | W: http://ospublish.constantvzw.org 49 | D: 50 | 51 | 52 | -------------------------------------------------------------------------------- /resources/Fonts/tape/OSP_Alfphabet/OFL-1.1.txt: -------------------------------------------------------------------------------- 1 | This file is part of Alfphabet-IV and is for description. 2 | 3 | Copyright (C) 2007-2010 OSP (Pierre Huyghebaert and Ludivine Loiseau). 4 | 5 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 6 | This license is copied below, and is also available with a FAQ at: 7 | http://scripts.sil.org/OFL 8 | 9 | 10 | ----------------------------------------------------------- 11 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 12 | ----------------------------------------------------------- 13 | 14 | PREAMBLE 15 | The goals of the Open Font License (OFL) are to stimulate worldwide 16 | development of collaborative font projects, to support the font creation 17 | efforts of academic and linguistic communities, and to provide a free and 18 | open framework in which fonts may be shared and improved in partnership 19 | with others. 20 | 21 | The OFL allows the licensed fonts to be used, studied, modified and 22 | redistributed freely as long as they are not sold by themselves. The 23 | fonts, including any derivative works, can be bundled, embedded, 24 | redistributed and/or sold with any software provided that any reserved 25 | names are not used by derivative works. The fonts and derivatives, 26 | however, cannot be released under any other type of license. The 27 | requirement for fonts to remain under this license does not apply 28 | to any document created using the fonts or their derivatives. 29 | 30 | DEFINITIONS 31 | "Font Software" refers to the set of files released by the Copyright 32 | Holder(s) under this license and clearly marked as such. This may 33 | include source files, build scripts and documentation. 34 | 35 | "Reserved Font Name" refers to any names specified as such after the 36 | copyright statement(s). 37 | 38 | "Original Version" refers to the collection of Font Software components as 39 | distributed by the Copyright Holder(s). 40 | 41 | "Modified Version" refers to any derivative made by adding to, deleting, 42 | or substituting -- in part or in whole -- any of the components of the 43 | Original Version, by changing formats or by porting the Font Software to a 44 | new environment. 45 | 46 | "Author" refers to any designer, engineer, programmer, technical 47 | writer or other person who contributed to the Font Software. 48 | 49 | PERMISSION & CONDITIONS 50 | Permission is hereby granted, free of charge, to any person obtaining 51 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 52 | redistribute, and sell modified and unmodified copies of the Font 53 | Software, subject to the following conditions: 54 | 55 | 1) Neither the Font Software nor any of its individual components, 56 | in Original or Modified Versions, may be sold by itself. 57 | 58 | 2) Original or Modified Versions of the Font Software may be bundled, 59 | redistributed and/or sold with any software, provided that each copy 60 | contains the above copyright notice and this license. These can be 61 | included either as stand-alone text files, human-readable headers or 62 | in the appropriate machine-readable metadata fields within text or 63 | binary files as long as those fields can be easily viewed by the user. 64 | 65 | 3) No Modified Version of the Font Software may use the Reserved Font 66 | Name(s) unless explicit written permission is granted by the corresponding 67 | Copyright Holder. This restriction only applies to the primary font name as 68 | presented to the users. 69 | 70 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 71 | Software shall not be used to promote, endorse or advertise any 72 | Modified Version, except to acknowledge the contribution(s) of the 73 | Copyright Holder(s) and the Author(s) or with their explicit written 74 | permission. 75 | 76 | 5) The Font Software, modified or unmodified, in part or in whole, 77 | must be distributed entirely under this license, and must not be 78 | distributed under any other license. The requirement for fonts to 79 | remain under this license does not apply to any document created 80 | using the Font Software. 81 | 82 | TERMINATION 83 | This license becomes null and void if any of the above conditions are 84 | not met. 85 | 86 | DISCLAIMER 87 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 88 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 89 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 90 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 91 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 92 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 93 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 94 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 95 | OTHER DEALINGS IN THE FONT SOFTWARE. 96 | -------------------------------------------------------------------------------- /resources/Fonts/tape/OSP_Alfphabet/OFL-FAQ.txt: -------------------------------------------------------------------------------- 1 | OFL FAQ - Frequently Asked Questions about the SIL Open Font License (OFL) 2 | Version 1.1 - 26 February 2007 3 | (See http://scripts.sil.org/OFL for updates) 4 | 5 | 6 | 1 ABOUT USING AND DISTRIBUTING FONTS LICENSED UNDER THE OFL 7 | 8 | 1.1 Can I use the fonts in any publication, even embedded in the file? 9 | Yes. You may use them like most other fonts, but unlike some fonts you may include an embedded subset of the fonts in your document. Such use does not require you to include this license or other files (listed in OFL condition 2), nor does it require any type of acknowledgement within the publication. Some mention of the font name within the publication information (such as in a colophon) is usually appreciated. If you wish to include the complete font as a separate file, you should distribute the full font package, including all existing acknowledgements, and comply with the OFL conditions. Of course, referencing or embedding an OFL font in any document does not change the license of the document itself. The requirement for fonts to remain under the OFL does not apply to any document created using the fonts and their derivatives. Similarly, creating any kind of graphic using a font under OFL does not make the resulting artwork subject to the OFL. 10 | 11 | 1.2 Can I make web pages using these fonts? 12 | Yes! Go ahead! Using CSS (Cascading Style Sheets) is recommended. 13 | 14 | 1.3 Can I make the fonts available to others from my web site? 15 | Yes, as long as you meet the conditions of the license (do not sell by itself, include the necessary files, rename Modified Versions, do not abuse the Author(s)' name(s) and do not sublicense). 16 | 17 | 1.4 Can the fonts be included with Free/Libre and Open Source Software collections such as GNU/Linux and BSD distributions? 18 | Yes! Fonts licensed under the OFL can be freely aggregated with software under FLOSS (Free/Libre and Open Source Software) licenses. Since fonts are much more useful aggregated to than merged with existing software, possible incompatibility with existing software licenses is not a problem. You can also repackage the fonts and the accompanying components in a .rpm or .deb package and include them in distro CD/DVDs and online repositories. 19 | 20 | 1.5 I want to distribute the fonts with my program. Does this mean my program also has to be free and open source software? 21 | No. Only the portions based on the font software are required to be released under the OFL. The intent of the license is to allow aggregation or bundling with software under restricted licensing as well. 22 | 23 | 1.6 Can I include the fonts on a CD of freeware or commercial fonts? 24 | Yes, as long some other font or software is also on the disk, so the OFL font is not sold by itself. 25 | 26 | 1.7 Can I sell a software package that includes these fonts? 27 | Yes, you can do this with both the Original Version and a Modified Version. Examples of bundling made possible by the OFL would include: word processors, design and publishing applications, training and educational software, edutainment software, etc. 28 | 29 | 1.8 Why won't the OFL let me sell the fonts alone? 30 | The intent is to keep people from making money by simply redistributing the fonts. The only people who ought to profit directly from the fonts should be the original authors, and those authors have kindly given up potential direct income to distribute their fonts under the OFL. Please honor and respect their contribution! 31 | 32 | 1.9 I've come across a font released under the OFL. How can I easily get more information about the Original Version? How can I know where it stands compared to the Original Version or other Modified Versions? 33 | Consult the copyright statement(s) in the license for ways to contact the original authors. Consult the FONTLOG for information on how the font differs from the Original Version, and get in touch with the various contributors via the information in the acknowledgment section. Please consider using the Original Versions of the fonts whenever possible. 34 | 35 | 1.10 What do you mean in condition 4? Can you provide examples of abusive promotion / endorsement / advertisement vs. normal acknowledgement? 36 | The intent is that the goodwill and reputation of the author(s) should not be used in a way that makes it sound like the original author(s) endorse or approve of a specific Modified Version or software bundle. For example, it would not be right to advertise a word processor by naming the author(s) in a listing of software features, or to promote a Modified Version on a web site by saying "designed by ...". However, it would be appropriate to acknowledge the author(s) if your software package has a list of people who deserve thanks. We realize that this can seem to be a gray area, but the standard used to judge an acknowledgement is that if the acknowledgement benefits the author(s) it is allowed, but if it primarily benefits other parties, or could reflect poorly on the author(s), then it is not. 37 | 38 | 39 | 2 ABOUT MODIFYING OFL LICENSED FONTS 40 | 41 | 2.1 Can I change the fonts? Are there any limitations to what things I can and cannot change? 42 | You are allowed to change anything, as long as such changes do not violate the terms of the license. In other words, you are not allowed to remove the copyright statement(s) from the font, but you could add additional information into it that covers your contribution. 43 | 44 | 2.2 I have a font that needs a few extra glyphs - can I take them from an OFL licensed font and copy them into mine? 45 | Yes, but if you distribute that font to others it must be under the OFL, and include the information mentioned in condition 2 of the license. 46 | 47 | 2.3 Can I charge people for my additional work? In other words, if I add a bunch of special glyphs and/or OpenType/Graphite code, can I sell the enhanced font? 48 | Not by itself. Derivative fonts must be released under the OFL and cannot be sold by themselves. It is permitted, however, to include them in a larger software package (such as text editors, office suites or operating systems), even if the larger package is sold. In that case, you are strongly encouraged, but not required, to also make that derived font easily and freely available outside of the larger package. 49 | 50 | 2.4 Can I pay someone to enhance the fonts for my use and distribution? 51 | Yes. This is a good way to fund the further development of the fonts. Keep in mind, however, that if the font is distributed to others it must be under the OFL. You won't be able to recover your investment by exclusively selling the font, but you will be making a valuable contribution to the community. Please remember how you have benefitted from the contributions of others. 52 | 53 | 2.5 I need to make substantial revisions to the font to make it work with my program. It will be a lot of work, and a big investment, and I want to be sure that it can only be distributed with my program. Can I restrict its use? 54 | No. If you redistribute a Modified Version of the font it must be under the OFL. You may not restrict it in any way. This is intended to ensure that all released improvements to the fonts become available to everyone. But you will likely get an edge over competitors by being the first to distribute a bundle with the enhancements. Again, please remember how you have benefitted from the contributions of others. 55 | 56 | 2.6 Do I have to make any derivative fonts (including source files, build scripts, documentation, etc.) publicly available? 57 | No, but please do share your improvements with others. You may find that you receive more than what you gave in return. 58 | 59 | 2.7 Why can't I use the Reserved Font Name(s) in my derivative font names? I'd like people to know where the design came from. 60 | The best way to acknowledge the source of the design is to thank the original authors and any other contributors in the files that are distributed with your revised font (although no acknowledgement is required). The FONTLOG is a natural place to do this. Reserved Font Name(s) ensure that the only fonts that have the original names are the unmodified Original Versions. This allows designers to maintain artistic integrity while allowing collaboration to happen. It eliminates potential confusion and name conflicts. When choosing a name be creative and avoid names that reuse almost all the same letters in the same order or sound like the original. Keep in mind that the Copyright Holder(s) can allow a specific trusted partner to use Reserved Font Name(s) through a separate written agreement. 61 | 62 | 2.8 What do you mean by "primary name as presented to the user"? Are you referring to the font menu name? 63 | Yes, the requirement to change the visible name used to differentiate the font from others applies to the font menu name and other mechanisms to specify a font in a document. It would be fine, for example, to keep a text reference to the original fonts in the description field, in your modified source file or in documentation provided alongside your derivative as long as no one could be confused that your modified source is the original. But you cannot use the Reserved Font Names in any way to identify the font to the user (unless the Copyright Holder(s) allow(s) it through a separate agreement; see section 2.7). Users who install derivatives ("Modified Versions") on their systems should not see any of the original names ("Reserved Font Names") in their font menus, for example. Again, this is to ensure that users are not confused and do not mistake a font for another and so expect features only another derivative or the Original Version can actually offer. Ultimately, creating name conflicts will cause many problems for the users as well as for the designer of both the Original and Modified versions, so please think ahead and find a good name for your own derivative. Font substitution systems like fontconfig, or application-level font fallback configuration within OpenOffice.org or Scribus, will also get very confused if the name of the font they are configured to substitute to actually refers to another physical font on the user's hard drive. It will help everyone if Original Versions and Modified Versions can easily be distinguished from one another and from other derivatives. The substitution mechanism itself is outside the scope of the license. Users can always manually change a font reference in a document or set up some kind of substitution at a higher level but at the lower level the fonts themselves have to respect the Reserved Font Name(s) requirement to prevent ambiguity. If a substitution is currently active the user should be aware of it. 64 | 65 | 2.9 Am I not allowed to use any part of the Reserved Font Names? 66 | You may not use the words of the font names, but you would be allowed to use parts of words, as long as you do not use any word from the Reserved Font Names entirely. We do not recommend using parts of words because of potential confusion, but it is allowed. For example, if "Foobar" was a Reserved Font Name, you would be allowed to use "Foo" or "bar", although we would not recommend it. Such an unfortunate choice would confuse the users of your fonts as well as make it harder for other designers to contribute. 67 | 68 | 2.10 So what should I, as an author, identify as Reserved Font Names? 69 | Original authors are encouraged to name their fonts using clear, distinct names, and only declare the unique parts of the name as Reserved Font Names. For example, the author of a font called "Foobar Sans" would declare "Foobar" as a Reserved Font Name, but not "Sans", as that is a common typographical term, and may be a useful word to use in a derivative font name. Reserved Font Names should also be single words. A font called "Flowing River" should have Reserved Font Names "Flowing" and "River", not "Flowing River". 70 | 71 | 2.11 Do I, as an author, have to identify any Reserved Font Names? 72 | No, but we strongly encourage you to do so. This is to avoid confusion between your work and Modified versions. You may, however, give certain trusted parties the right to use any of your Reserved Font Names through separate written agreements. For example, even if "Foobar" is a RFN, you could write up an agreement to give company "XYZ" the right to distribute a modified version with a name that includes "Foobar". This allows for freedom without confusion. 73 | 74 | 2.12 Are any names (such as the main font name) reserved by default? 75 | No. That is a change to the license as of version 1.1. If you want any names to be Reserved Font Names, they must be specified after the copyright statement(s). 76 | 77 | 2.13 What is this FONTLOG thing exactly? 78 | It has three purposes: 1) to provide basic information on the font to users and other developers, 2) to document changes that have been made to the font or accompanying files, either by the original authors or others, and 3) to provide a place to acknowledge the authors and other contributors. Please use it! See below for details on how changes should be noted. 79 | 80 | 2.14 Am I required to update the FONTLOG? 81 | No, but users, designers and other developers might get very frustrated at you if you don't! People need to know how derivative fonts differ from the original, and how to take advantage of the changes, or build on them. 82 | 83 | 84 | 3 ABOUT THE FONTLOG 85 | 86 | The FONTLOG can take a variety of formats, but should include these four sections: 87 | 88 | 3.1 FONTLOG for 89 | This file provides detailed information on the font software. This information should be distributed along with the fonts and any derivative works. 90 | 91 | 3.2 Basic Font Information 92 | (Here is where you would describe the purpose and brief specifications for the font project, and where users can find more detailed documentation. It can also include references to how changes can be contributed back to the Original Version. You may also wish to include a short guide to the design, or a reference to such a document.) 93 | 94 | 3.3 ChangeLog 95 | (This should list both major and minor changes, most recent first. Here are some examples:) 96 | 97 | 7 February 2007 (Pat Johnson) Version 1.3 98 | - Added Greek and Cyrillic glyphs 99 | - Released as "" 100 | 101 | 7 March 2006 (Fred Foobar) Version 1.2 102 | - Tweaked contextual behaviours 103 | - Released as "" 104 | 105 | 1 Feb 2005 (Jane Doe) Version 1.1 106 | - Improved build script performance and verbosity 107 | - Extended the smart code documentation 108 | - Corrected minor typos in the documentation 109 | - Fixed position of combining inverted breve below (U+032F) 110 | - Added OpenType/Graphite smart code for Armenian 111 | - Added Armenian glyphs (U+0531 -> U+0587) 112 | - Released as "" 113 | 114 | 1 Jan 2005 (Joe Smith) Version 1.0 115 | - Initial release of font "" 116 | 117 | 3.4 Acknowledgements 118 | (Here is where contributors can be acknowledged. 119 | 120 | If you make modifications be sure to add your name (N), email (E), web-address (W) and description (D). This list is sorted by last name in alphabetical order.) 121 | 122 | N: Jane Doe 123 | E: jane@university.edu 124 | W: http://art.university.edu/projects/fonts 125 | D: Contributor - Armenian glyphs and code 126 | 127 | N: Fred Foobar 128 | E: fred@foobar.org 129 | W: http://foobar.org 130 | D: Contributor - misc Graphite fixes 131 | 132 | N: Pat Johnson 133 | E: pat@fontstudio.org 134 | W: http://pat.fontstudio.org 135 | D: Designer - Greek & Cyrillic glyphs based on Roman design 136 | 137 | N: Tom Parker 138 | E: tom@company.com 139 | W: http://www.company.com/tom/projects/fonts 140 | D: Engineer - original smart font code 141 | 142 | N: Joe Smith 143 | E: joe@fontstudio.org 144 | W: http://joe.fontstudio.org 145 | D: Designer - original Roman glyphs 146 | 147 | (Original authors can also include information here about their organization.) 148 | 149 | 150 | 4 ABOUT MAKING CONTRIBUTIONS 151 | 152 | 4.1 Why should I contribute my changes back to the original authors? 153 | It would benefit many people if you contributed back to what you've received. Providing your contributions and improvements to the fonts and other components (data files, source code, build scripts, documentation, etc.) could be a tremendous help and would encourage others to contribute as well and 'give back', which means you will have an opportunity to benefit from other people's contributions as well. Sometimes maintaining your own separate version takes more effort than merging back with the original. Be aware that any contributions, however, must be either your own original creation or work that you own, and you may be asked to affirm that clearly when you contribute. 154 | 155 | 4.2 I've made some very nice improvements to the font, will you consider adopting them and putting them into future Original Versions? 156 | Most authors would be very happy to receive such contributions. Keep in mind that it is unlikely that they would want to incorporate major changes that would require additional work on their end. Any contributions would likely need to be made for all the fonts in a family and match the overall design and style. Authors are encouraged to include a guide to the design with the fonts. It would also help to have contributions submitted as patches or clearly marked changes (the use of smart source revision control systems like subversion, svk or bzr is a good idea). Examples of useful contributions are bug fixes, additional glyphs, stylistic alternates (and the smart font code to access them) or improved hinting. 157 | 158 | 4.3 How can I financially support the development of OFL fonts? 159 | It is likely that most authors of OFL fonts would accept financial contributions - contact them for instructions on how to do this. Such contributions would support future development. You can also pay for others to enhance the fonts and contribute the results back to the original authors for inclusion in the Original Version. 160 | 161 | 162 | 5 ABOUT THE LICENSE 163 | 164 | 5.1 I see that this is version 1.1 of the license. Will there be later changes? 165 | Version 1.1 is the first minor revision of the OFL. We are confident that version 1.1 will meet most needs, but are open to future improvements. Any revisions would be for future font releases, and previously existing licenses would remain in effect. No retroactive changes are possible, although the Copyright Holder(s) can re-release the font under a revised OFL. All versions will be available on our web site: http://scripts.sil.org/OFL. 166 | 167 | 5.2 Can I use the SIL Open Font License for my own fonts? 168 | Yes! We heartily encourage anyone to use the OFL to distribute their own original fonts. It is a carefully constructed license that allows great freedom along with enough artistic integrity protection for the work of the authors as well as clear rules for other contributors and those who redistribute the fonts. Some additional information about using the OFL is included at the end of this FAQ. 169 | 170 | 5.3 Does this license restrict the rights of the Copyright Holder(s)? 171 | No. The Copyright Holder(s) still retain(s) all the rights to their creation; they are only releasing a portion of it for use in a specific way. For example, the Copyright Holder(s) may choose to release a 'basic' version of their font under the OFL, but sell a restricted 'enhanced' version. Only the Copyright Holder(s) can do this. 172 | 173 | 5.4 Is the OFL a contract or a license? 174 | The OFL is a license and not a contract and so does not require you to sign it to have legal validity. By using, modifying and redistributing components under the OFL you indicate that you accept the license. 175 | 176 | 5.5 How about translating the license and the FAQ into other languages? 177 | SIL certainly recognises the need for people who are not familiar with English to be able to understand the OFL and this FAQ better in their own language. Making the license very clear and readable is a key goal of the OFL. 178 | 179 | If you are an experienced translator, you are very welcome to help by translating the OFL and its FAQ so that designers and users in your language community can understand the license better. But only the original English version of the license has legal value and has been approved by the community. Translations do not count as legal substitutes and should only serve as a way to explain the original license. SIL - as the author and steward of the license for the community at large - does not approve any translation of the OFL as legally valid because even small translation ambiguities could be abused and create problems. 180 | 181 | We give permission to publish unofficial translations into other languages provided that they comply with the following guidelines: 182 | 183 | - put the following disclaimer in both English and the target language stating clearly that the translation is unofficial: 184 | 185 | "This is an unofficial translation of the SIL Open Font License into $language. It was not published by SIL International, and does not legally state the distribution terms for fonts that use the OFL. A release under the OFL is only valid when using the original English text. 186 | 187 | However, we recognize that this unofficial translation will help users and designers not familiar with English to understand the SIL OFL better and make it easier to use and release font families under this collaborative font design model. We encourage designers who consider releasing their creation under the OFL to read the FAQ in their own language if it is available. 188 | 189 | Please go to http://scripts.sil.org/OFL for the official version of the license and the accompanying FAQ." 190 | 191 | - keep your unofficial translation current and update it at our request if needed, for example if there is any ambiguity which could lead to confusion. 192 | 193 | If you start such a unofficial translation effort of the OFL and its accompanying FAQ please let us know, thank you. 194 | 195 | 196 | 6 ABOUT SIL INTERNATIONAL 197 | 198 | 6.1 Who is SIL International and what does it do? 199 | SIL International is a worldwide faith-based education and development organization (NGO) that studies, documents, and assists in developing the world's lesser-known languages through literacy, linguistics, translation, and other academic disciplines. SIL makes its services available to all without regard to religious belief, political ideology, gender, race, or ethnic background. SIL's members and volunteers share a Christian commitment. 200 | 201 | 6.2 What does this have to do with font licensing? 202 | The ability to read, write, type and publish in one's own language is one of the most critical needs for millions of people around the world. This requires fonts that are widely available and support lesser-known languages. SIL develops - and encourages others to develop - a complete stack of writing systems implementation components available under open licenses. This open stack includes input methods, smart fonts, smart rendering libraries and smart applications. There has been a need for a common open license that is specifically applicable to fonts and related software (a crucial component of this stack) so SIL developed the SIL Open Font License with the help of the FLOSS community. 203 | 204 | 6.3 How can I contact SIL? 205 | Our main web site is: http://www.sil.org/ 206 | Our site about complex scripts is: http://scripts.sil.org/ 207 | Information about this license (including contact email information) is at: http://scripts.sil.org/OFL 208 | 209 | 210 | 7 ABOUT USING THE OFL FOR YOUR ORIGINAL FONTS 211 | 212 | If you want to release your fonts under the OFL, you only need to do the following: 213 | 214 | 7.1 Put your copyright and reserved font names information in the beginning of the main OFL file. 215 | 7.2 Put your copyright and the OFL references in your various font files (such as in the copyright, license and description fields) and in your other components (build scripts, glyph databases, documentation, rendering samples, etc). 216 | 7.3 Write an initial FONTLOG for your font and include it in the release package. 217 | 7.4 Include the OFL in your release package. 218 | 7.5 We also highly recommend you include the relevant practical documentation on the license by putting the OFL-FAQ in your package. 219 | 7.6 If you wish, you can use the OFL Graphics on your web page. 220 | 221 | 222 | 223 | That's all. If you have any more questions please get in touch with us. 224 | 225 | 226 | -------------------------------------------------------------------------------- /resources/Fonts/tape/OSP_Alfphabet/README.txt: -------------------------------------------------------------------------------- 1 | 2 | FONTLOG.txt: the font design-oriented changelog 3 | http://scripts.sil.org/OFL-FAQ_web#00e3bd04 4 | 5 | Alfphabet-IV.ttf: ttf font sources 6 | http://www.truetype-typography.com/ttspec.htm 7 | 8 | OFL-1.1.txt: copyright notice header + license 9 | OFL-1.1-header.txt: license header for separate files 10 | OFL-FAQ.txt: Frequently Asked Questions about the license and its collaboration model 11 | http://scripts.sil.org/OFL 12 | 13 | 14 | -------------------------------------------------------------------------------- /resources/Soundfont/Byte.sf2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Soundfont/Byte.sf2 -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerBandage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerBandage.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerBeaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerBeaker.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerBomb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerBomb.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerBulb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerBulb.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerCactus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerCactus.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerCat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerCat.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerCorndog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerCorndog.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerCrab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerCrab.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerDiamond.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerDiamond.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerDog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerDog.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerDonut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerDonut.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerDrop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerDrop.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerEggplant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerEggplant.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerFrog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerFrog.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerHeart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerHeart.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerIce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerIce.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerIceCream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerIceCream.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerJellyfish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerJellyfish.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerJoystick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerJoystick.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerKite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerKite.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerLighter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerLighter.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerLightning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerLightning.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerLime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerLime.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerMagGlass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerMagGlass.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerMartini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerMartini.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerMonkey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerMonkey.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerPlanet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerPlanet.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerPoo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerPoo.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerRainbow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerRainbow.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerRibbon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerRibbon.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerSalt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerSalt.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerSmiley.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerSmiley.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerSpray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerSpray.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerStar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerStar.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerTea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerTea.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerThumbsDown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerThumbsDown.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerThumbsUp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerThumbsUp.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerTissue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerTissue.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerTopHat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerTopHat.png -------------------------------------------------------------------------------- /resources/Stickers/No Shadow/StickerTurtle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/No Shadow/StickerTurtle.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerBandage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerBandage.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerBeaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerBeaker.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerBomb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerBomb.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerBulb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerBulb.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerCactus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerCactus.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerCat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerCat.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerCorndog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerCorndog.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerCrab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerCrab.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerDiamond.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerDiamond.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerDog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerDog.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerDonut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerDonut.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerDrop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerDrop.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerEggplant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerEggplant.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerFrog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerFrog.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerHeart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerHeart.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerIce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerIce.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerIceCream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerIceCream.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerJellyfish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerJellyfish.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerJoystick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerJoystick.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerKite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerKite.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerLighter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerLighter.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerLightning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerLightning.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerLime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerLime.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerMagGlass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerMagGlass.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerMartini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerMartini.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerMonkey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerMonkey.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerPlanet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerPlanet.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerPoo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerPoo.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerRainbow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerRainbow.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerRibbon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerRibbon.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerSalt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerSalt.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerSmiley.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerSmiley.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerSpray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerSpray.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerStar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerStar.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerTea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerTea.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerThumbsDown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerThumbsDown.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerThumbsUp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerThumbsUp.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerTissue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerTissue.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerTopHat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerTopHat.png -------------------------------------------------------------------------------- /resources/Stickers/With Shadow/StickerTurtle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bytehq/api/2c7f8054dbdc460f899d444bb805a9e0498f3775/resources/Stickers/With Shadow/StickerTurtle.png --------------------------------------------------------------------------------