NAV
Web iOS Android

Introduction

Welcome to RapidAPI. RapidAPI let’s you build the backend for your app easily - without writing a single line of code. With RapidAPI you can use blocks to construct your backend logic. From saving to a database to proccesing payments - blocks can do anything!

How it’s all started?

We were at a hackathon when we realized all the teams were spending hours building the same backend logic: installing DBs, writing user signup logic, updating packages and more. All these teams were spending hours and hours - basically doing the same thing. That’s what we’ve built RapidAPI for. With RapidAPI, you get all the basic backend functions deliverd to you as blocks. All you have to do is drag and drop them and you get a fully functional backend - hosted in the cloud. Rather than spending days on backend development - do it in minutes.

The Backend

RapidAPI is an online platform that lets you create a back end for your web or mobile app without writing a single line of code. Every web or mobile app has two parts:

When using RapidAPI, you construct the back end logic using blocks. Each block represents a basic action done in the back end. These are things like saving to a database, sending a notification or accessing an API. The back end is hosted on the RapidAPI servers and you can use it from your app.

How it works

Your backend is built out of backend actions. Each action performs a certain task for your app. Examples of actions can be:

Each one of these backend actions is built out of blocks. Each block performs a basic task within an action. Let’s take a sign up action for example. We’ll first want to make sure that the user sends a valid email address. For that, we’ll use the verify.email block. This block will get the email passed in the request to that action and check if it’s valid. It’ll have 2 outcomes - these are things that can happen - either the email is valid, or it’s not. If it’s not - we’ll return an error message. If it is, we’ll check the password using a similar verify.passwordLength block. If that’s valid, we’ll save to the database - and so on… That way, we’ll build the logic of the action. It’ll end up looking like that:

Getting started

Let’s create the basic sign up backend action the get the ropes of using the system.

To begin, head over to https://rapidapi.com and sign up.

Creating your first project

A project in RapidAPI is basically the backend of a single app. It contains all the backend actions for that app, as well as it’s database. Let’s start by creating a new project.

Creating a database collection

Now that we have a project, create a database collection that will store all the users that sign up. Do so by heading over to the database tab and clicking Create New Collection. Name the collection users and create it.

You’ll now notice you have a fully functional database collection. In our next step, we’ll build a backend action that saves to it.

Creating the Sign Up backend action

To create the sign up backend action head over to the ENDPOINTS tab. Click the Backend Action button and create the new backend action named sign up. Once it is created, open it by clicking Edit.

Within the editor, we’ll first drag in the verify.email block to verify that the email supplied by the user is correct. As the parameter to be checked, we’ll use #body.email. This will be replaced with the value sent under ‘email’ in the call to that backend action.

You’ll notice that the verify block has 2 outcomes:

If it’s not a valid email, we’ll use the response.sendMessage block to send back an error message saying The email sent is not valid, with a 400 code.

In case of success we will want to save the new user (e.g. email address) to the database (in real life we will probably get a password and name and want to verify them, but it’s a very similar proccess).

For that we will drag in the database.save block which saves a new row into the database. We will set it to save to the users collection we’ve created earlier and define a row with one column - email. The value will be #body.email - the same value we verified in the previous step.

You may notice the database.save block has 2 possible outcomes: success and error. In both cases we’ll use the response.sendMessage block:

You by now have a fully working sign up backend action. Next up we’ll try it up and see how it can be connected to a mobile / web app.

Trying it out

Now that you are the proud owner of a backend action, you will probably want to take it to a spin and see how it works, right? To do just that you can use the run button on the top right corner of the editor. It’ll open up the run panel. You should go to the body tab where we can set the body parameters. Create an email parameter and put a valid email in it. Press run and you’ll see the success message.

You can also go back to the database tab in the project page and see the new email saved to the users collection. You can also try putting an invalid email and see that you are getting the appropriate error message.

Implementing it in your app

Every backend action in RapidAPI is in-fact an HTTP endpoint. That means that you can make requests to it from any platfrom (including iOS, Android and Web Pages) using standard HTTP Request frameworks.

To make life easier, we have compiled pre written code snippets that connect to the backend actions. To access them, go back to the Endpoints tab in the project page, select the backend action that you want to connect to and click on the Code Snippet button. In the popup, select the platform and proggraming languge and copy the code snippet.

Notice that if you are using #body.SOMETHING in your action, the code snippet will have that SOMETHING in place already, so you’ll just need to replace it’s value.

Here are some more in-depth guides on mobile integrations:

System Overview

Overview Page

The overview page will show you the following information:

Endpoints Page

The endpoints page is the core of your app. Through this page you can create the backend actions for your app, create static pages based on HTML, CSS and JS and upload files.

Web Pages

By clicking on Web Pages you will be able to create a static webpage that will be host on our servers. The URL of the web page will be structured this way:

http://[Your-Project-Name].imrapid.io/[The-Web-Page Name]

For example: http://expert-bluewhale-loli.imrapid.io/index

Files

Using this tool you can upload any file you want to our servers and GET it later.

Backend Actions

By clicking on ‘Backend Actions’ you will be able to create a backend action, for example: Sign_up backend action (Endpoint).

Give it a name that will describe it the best and go edit it. To create your endpoint use the 'Edit’ button right after you’re creating it, this will take you forward to the Endpoints (Backend Actions) Editor page =>

Endpoints Editor

The editor is the core of our platform, using this tool you will be able to create any logic tree based any API we support.

The editor is divided into the tools you need to create the endpoints:

Blocks

APIs divided into backend actions -> Blocks = Drag and Drop them to open them.

Code Snippet

An HTTP Access code generator for iOS, Android and WEB.

RUN Tool

The RUN tool, a.k.a the Action Panel is your tool to check the endpoint. It means that you will be able to find out

Sometimes, it’s good to check your endpoint with Postman also.

Body Parameters

To use the #body parameters you should fill the

Facebook

Facebook.Login

Drag and drop this block from the Facebook Package.

The Endpoint Must Be in a GET method: To add a facebook login endpoint, go to the endpoint page and create new endpoint, while creating, click on ‘advanced settings’ and change the endpoint type to a GET type.

Use Case: Add a facebook login plugin to your app.

Parameters information:

Parameter Use Description
Client ID Your App ID on Facebook Developers What is your app ID?
Client Secret Your App Secret on Facebook Developers What is your app ID?
To Object Give your object a name, so you can print it later with the result.

Returns Examples: Login url.

How to test? Use the 'RUN’ tool (How to?)

facebook.getUserDetails

Drag and drop this block from the Facebook Package.

Use Case: Get details of a user that has signed up using your facebook app.

Parameters information:

Parameter Use Description
userToken Facebook Access Token Tool What’s the user’s token?
App Secret Your App Secret on Facebook Developers What is your app ID?
To Object Give your object a name, so you can print it later with the result.

Returns Examples: Login url.

How to test? Use the 'RUN’ tool (How to?)

And use the AccessToken Tool on Facebook.

facebook.postonWall

Drag and drop this block from the Facebook Package.

Use Case: Post on user’s wall.

Parameters information:

Parameter Use Description
Message Plain Text or #Body Parameter (How to?) What is the message that will be published on user’s wall
userToken Facebook Access Token Tool What’s the user’s token?
To Object Give your object a name, so you can print it later with the result.

Returns Examples: Login url.

How to test? Use the 'RUN’ tool (How to?)

And use the AccessToken Tool on Facebook.

Database

Here you will get an explanation about the backend functions connected to

Database Find.one

Name of the backend functions: Find One object in your database.

Use Case: Let’s say you want to get an object from your database. For example: Get user’s email.

Parameters information:

Parameter Use Example
Collection This is the collection you’ve created on the database section. If you didn’t created any… just give it a name and a collection will be created (Yes! MongoDB). users
Query Field Where do you want to find the data? you want to get an email - Use the string = email.
Query Operator What will be the search type (action) that will go over your database.
Query Value What are you looking for? the exact email: mickey@rapidapi.com
To Object This will show the result, give it a name and use with ’#’ to get the result as a response later on. result

Missing: Use the response.SendMessage block to get a missing message back. For example: The object is missing.

Database.find

Name of the backend functions: Find more than one object in your database.

Use Case: Let’s say I want to get all the data in a specific collection.

Parameters information:

Parameter Use Example
Collection This is the collection you’ve created on the database section. If you didn’t created any… just give it a name and a collection will be created (Yes! MongoDB). users
Query Field Where do you want to find the data? you want to get an email - Use the string = email.
Query Operator What will be the search type (action) that will go over your database.
Query Value What are you looking for? the exact email: mickey@rapidapi.com
To Object This will show the result, give it a name and use with ’#’ to get the result as a response later on. result

Missing: Use the response.SendMessage block to get a missing message back. For example: The object is missing.

Database.update

Name of the backend functions: Update an existing object in a collection.

Use Case: update user’s email or password.

Structure: Use the query to find what you want to update and then use the update section to actually update it.

Parameters information:

Parameter Use Example
Collection This is the collection you’ve created on the database section. If you didn’t created any… just give it a name and a collection will be created (Yes! MongoDB). users
Query Field Where do you want to find the data? you want to get an email - Use the string = email.
Query Operator What will be the search type (action) that will go over your database.
Query Value What are you looking for? the exact email: mickey@rapidapi.com

Database.save

Name of the backend functions: Save an object in a collection

Use Case: You want to save a new customer type that has registered to your online store.

How To Use (DOC):

  1. Click add to add a key.

  2. Name your key and choose the object type you want to use.

2.a. Array is a collection of values. Use this to save a collection of users IDs.

2.b. Object is a custom data schema that can contain arrays and strings and more objects.

3.c. String is traditionally a sequence of characters. Use it to define key and value for something you want to save in the database.

Database.remove

Name of the backend functions: Remove an object in a collection

Use Case: You want to remove a customer type from your collection.

Parameters information:

Parameter Use Example
Collection This is the collection you’ve created on the database section. If you didn’t created any… just give it a name and a collection will be created (Yes! MongoDB). users
Query Field Where do you want to find the data? you want to get an email - Use the string = email.
Query Operator What will be the search type (action) that will go over your database.
Query Value What are you looking for? the exact email: mickey@rapidapi.com

Send SMS

delivery.sendSMS

Drag and drop this block from the delivery package.

Use Case: Send an SMS to a new registered user.

Parameters information:

Parameter Use Description
Message Plain Text or use #body parameter (How to?) This text will be sent as a text message
To Phone Number + Area Code or use #body parameter (How to?) Use a sentence that describes the email. For example: Welcome to RapidAPI.

Returns Examples: Success or Error.

How to test? Use the ‘RUN’ tool (How to?)

Send Email

delivery.sendPlainEmail

Drag and drop this block from the delivery package.

Use Case: Can be part of every scheme. For example: User has signed up and a welcome email has been sent to him.

Parameters information:

Parameter Use Description
From Use an email address or use #body parameter (How to?) This will be shown as the sender email address
Subject Plain text or use #body parameter (How to?) Use a sentence that describes the email. For example: Welcome to RapidAPI.
Text Plain Text Use the text that will be sended in the email body.
To Use an email address or use #body parameter (How to?) Who’s going to get this email?

Returns Examples: Success or Error.

How to test? Use the 'RUN’ tool (How to?)

Files

File.save

Name of the backend functions: Save file on the server

Use Case: User want to add a profile picture.

How to use: Add an upload function in your code and connect the endpoint to it.

Parameters information:

Parameter Use Description
File #body.image use #body parameter (How to?) to upload file
Folder #body.images The folder that will contain all the files.
Key profilepic the name of the file you want to upload.

Returns Examples: Success or Error.

How to test? Use the ‘RUN’ tool (How to?)

File.files.saveWithRandomKey

Name of the backend functions: Save file on the server and giving it a different name.

Use Case: You want to add gallery to your website.

How to use: Add an upload function in your code to connect our endpoint to it.

Parameters information:

Parameter Use Description
File #body.image use #body parameter (How to?) to upload file
Folder #body.images The folder that will contain all the files.
to object where do you want to save the file? Give it a name.

Returns Examples: Success or Error.

How to test? Use the 'RUN’ tool (How to?)

files.getDownloadURL

Name of the backend functions: Get a url of an uploaded file.

Use Case: Can be used with an uploader to get the link to the file you’ve uploaded.

Parameters information:

Parameter Use Description
folder #body.image from what folder do you want to get the file URL from?
key #body.images What’s the name of the file?
to object where do you want to save the file? Give it a name.

Returns Examples: Success or Error.

How to test? Use the 'RUN’ tool (How to?)

files.read

Name of the backend functions: Read a file.

Use Case: Allows you to read the file and to show it. Let’s say you want to show an image on the screen.

Parameters information:

Parameter Use Description
folder #body.image from what folder do you want to get the file URL from?
key #body.images What’s the name of the file?
to object where do you want to save the file? Give it a name.

Returns Examples: Success or Error.

How to test? Use the 'RUN’ tool (How to?)

Stripe (Payment)

Stripe.charge

The Endpoint Must Be in a GET method: To add a stripe charge function => endpoint, go to the endpoint page and create new endpoint, while creating, click on ‘advanced settings’ and change the endpoint type to a GET type.

Name of the backend functions: Charge trough Stripe.

Use Case: Sell items trough your website, charge using stripe.

Parameters information:

Parameter Use Description
amount For example: 32.075001 Use generater or Google Maps to get lat
currency For example: 34.783453 Use generater or Google Maps to get long
description Use numbers In meters. For example: 50 meters.
secretId object where do you want to save the file? Give it a name. For example: places
source object where do you want to save the file? Give it a name. For example: places

Calculate

Calculate.add

Use Case: You are using leaderboard in your game and you want to add the number of user’s points after the game has ended.

Parameters information:

Parameter Use Description
Num1 Number of #body parameter Will be the first number to be part of the function
Num2 Number of #body parameter Will be the second number to be part of the function
Sum Object Give your object a name, so you can print it later with the result.

Returns Examples: You will get the addition result. Something like 3+1=4?

How to test? Use the ‘RUN’ tool (How to?)

Calculate.substract

Use Case: Substract two numbers and get a resault.

Parameters information:

Parameter Use Description
Num1 Number of #body parameter Will be the first number to be part of the function
Num2 Number of #body parameter Will be the second number to be part of the function
difference Object Give your object a name, so you can print it later with the result.

Returns Examples: You will get the substraction result. Something like 3-1=2?

How to test? Use the 'RUN’ tool (How to?)

Calculate.multiply

Use Case: Multiply two numbers and get a resault.

Parameters information:

Parameter Use Description
Num1 Number of #body parameter (How to?) Will be the first number to be part of the function
Num2 Number of #body parameter (How to?) Will be the second number to be part of the function
Product Object Give your object a name, so you can print it later with the result.

Returns Examples: You will get the substraction result. Something like 3-1=2?

How to test? Use the 'RUN’ tool (How to?)

Calculate.random

Use Case: Print a random number between min and max limit.

Parameters information:

Parameter Use Description
Max Number of #body parameter (How to?) Will be the minimum number presented
Min Number of #body parameter (How to?) Will be the maximum number presented
to Object Give your object a name, so you can print it later with the result.

Returns Examples: You will get a random number between the minimum and the maximum number.

How to test? Use the 'RUN’ tool (How to?)

Calculate.divide

Use Case: Divide two numbers and get a resault.

Parameters information:

Parameter Use Description
Num1 Number of #body parameter (How to?) Will be the first number to be part of the function
Num2 Number of #body parameter (How to?) Will be the second number to be part of the function
to Object Give your object a name, so you can print it later with the result.

Returns Examples: A result of two divided numbers. 3/3 = 1.

How to test? Use the 'RUN’ tool (How to?)

Google Places

Places.getNearbyPlaces

Name of the backend functions: Get places near by; based on longitude, latitude and radius.

How to use: Go to LatLong Generator and get the latitued and longtitude of the point place you want to track.

Use Case: You want to show a user which places are near his location.

Parameters information:

Parameter Use Description
latitude For example: 32.075001 Use generater or Google Maps to get lat
longitude For example: 34.783453 Use generater or Google Maps to get long
radius Use numbers In meters. For example: 50 meters.
to object where do you want to save the file? Give it a name. For example: places

eBay API

You can connect to the eBay API using the RapidAPI system. This let’s you do things like querying products and prices, placing bids and more…

To use the eBay API you need to first obtain an API key. You may obtain that key set from the eBay developer portal. to start, sign up for a developer account. Once in the account you’ll be immidiatly prompted to create a new app. Give your app a name and choose production. You may be required to enter additional personal details.

Once you are finished your app will be created and you’ll see 3 different keys:

Take note of these as you’ll need to put them in the eBay API blocks to connect to the eBay API.

ebay.findItemsByKeyword

This block let’s you query the entire eBay product base and find products based on search keywords.

Use Case: if you want to suggest products your users may need - you can present some options from eBay. For example, a camping app may present tents as users will probably need those.

Parameter Use Description
FreeShippingOnly true or false If true, the block will only look for products with free shipping.
MaxPrice Number / empty Will limit the price of the found products (in USD). Leave empty for unlimited price.
appId App ID Your App ID generated in the eBay Developer Portal (see the beggining of the section for reference)
data to The object the returned items will be saved to. You can use #to to get the found items.
domainName Digital_cameras Catalog Name
error ‘e’ If there is an error, the error message will ve saved there (so you can use #e to see the message)
keyword iPhone 6, Harry potter box set The keywords you are searching for

If there is success, use #t to use the returned items. It’ll hold an array with all the found items. Each item will look like:


{
"itemId": "272146040512",
"title": "New Apple iPhone 6s - 64GB - Factory GSM Unlocked 12.0MP Smartphone - All Colors",
"globalId": "EBAY-US",
"subtitle": "Free Shipping. 1 Year Apple Warranty. Apple UK Charger.",
"primaryCategory": {
"categoryId": "9355",
"categoryName": "Cell Phones & Smartphones"
},
"galleryURL": "http://thumbs1.ebaystatic.com/pict/272146040512404000000001_2.jpg",
"viewItemURL": "http://www.ebay.com/itm/New-Apple-iPhone-6s-64GB-Factory-GSM-Unlocked-12-0MP-Smartphone-All-Colors-/272146040512?var=570957295960",
"paymentMethod": "PayPal",
"autoPay": "true",
"postalCode": "11205",
"location": "Brooklyn,NY,USA",
"country": "US",
"shippingInfo": {
"shippingServiceCost": {
"amount": 0,
"currencyId": "USD"
},
"shippingType": "FlatDomesticCalculatedInternational",
"shipToLocations": [
"US",
"CA",
"GB",
"AU",
"AT",
"BE",
"FR",
"DE",
"IT",
"JP",
"ES",
"TW",
"NL",
"CN",
"HK",
"MX",
"DK",
"RO",
"SK",
"BG",
"CZ",
"FI",
"HU",
"LV",
"LT",
"MT",
"EE",
"GR",
"PT",
"CY",
"SI",
"SE",
"KR",
"ID",
"ZA",
"TH",
"IE",
"PL",
"RU",
"IL"
],
"expeditedShipping": "true",
"oneDayShippingAvailable": "false",
"handlingTime": "1"
},
"sellingStatus": {
"currentPrice": {
"amount": 699.99,
"currencyId": "USD"
},
"convertedCurrentPrice": {
"amount": 699.99,
"currencyId": "USD"
},
"sellingState": "Active",
"timeLeft": "P10DT17H53M11S"
},
"listingInfo": {
"bestOfferEnabled": "false",
"buyItNowAvailable": "false",
"startTime": "2016-02-25T19:04:55.000Z",
"endTime": "2016-04-25T19:09:55.000Z",
"listingType": "StoreInventory",
"gift": "false"
},
"returnsAccepted": "true",
"condition": {
"conditionId": "1000",
"conditionDisplayName": "New"
},
"isMultiVariationListing": "true",
"discountPriceInfo": {
"originalRetailPrice": {
"amount": 999.99,
"currencyId": "USD"
},
"pricingTreatment": "STP",
"soldOnEbay": "false",
"soldOffEbay": "false"
},
"topRatedListing": "true"
},

ebay.getSingleItem

This block gets information about a single item in the eBay catalog.

Use case: A user saves a list of favorite items and you want to get their up-to-date details.

Parameter Use Description
appId App ID Your App ID generated in the eBay Developer Portal (see the beggining of the section for reference)
itemId 272146040512 The unique ID of that item. Recieved when performing a query. Also, when looking at an item in the ebay site, it’s the number at the end of the URL. (For example, for this, it’ll be 381503849423).
to to The object the returned items will be saved to. You can use #to to get the found items.

The data returned by the block will be formatted like that:

{
"$": {
"xmlns": "urn:ebay:apis:eBLBaseComponents"
},
"Timestamp": "2016-04-15T01:13:29.397Z",
"Ack": "Success",
"Build": "E963_CORE_APILW_17911290_R1",
"Version": "963",
"Item": {
"ItemID": "381503849423",
"EndTime": "2016-04-26T07:49:23.000Z",
"ViewItemURLForNaturalSearch": "http://www.ebay.com/itm/RC-6-Axis-Quadcopter-Flying-Drone-Toy-Gyro-HD-Camera-Remote-Control-LED-Lights-/381503849423",
"ListingType": "FixedPriceItem",
"Location": "Rancho Cucamonga, California",
"GalleryURL": "http://thumbs4.ebaystatic.com/pict/3815038494238080_1.jpg",
"PictureURL": [
"http://i.ebayimg.com/00/s/MTYwMFgxNjAw/z/KbAAAOSwCQNWgOmK/$_1.JPG?set_id=880000500F",
"http://i.ebayimg.com/00/s/MTYwMFgxNjAw/z/1IIAAOSwLpdW8rVs/$_1.JPG?set_id=880000500F",
"http://i.ebayimg.com/00/s/MTYwMFgxNjAw/z/3iUAAOSw9uFW8rVs/$_1.JPG?set_id=880000500F",
"http://i.ebayimg.com/00/s/MTYwMFgxNjAw/z/kZEAAOSwZ8ZW8rVs/$_1.JPG?set_id=880000500F",
"http://i.ebayimg.com/00/s/MTYwMFgxNjAw/z/oFgAAOSwBnVW8rVt/$_1.JPG?set_id=880000500F"
],
"PrimaryCategoryID": "34053",
"PrimaryCategoryName": "Toys & Hobbies:Radio Control & Control Line:Radio Control Vehicles:Airplanes & Helicopters",
"BidCount": "0",
"ConvertedCurrentPrice": {
"amount": 49.95,
"currencyID": "USD"
},
"ListingStatus": "Active",
"TimeLeft": "P11DT6H35M54S",
"Title": "RC 6-Axis Quadcopter Flying Drone Toy Gyro HD Camera Remote Control LED Lights",
"Country": "US",
"AutoPay": "false",
"ConditionID": "1000",
"ConditionDisplayName": "New",
"QuantityAvailableHint": "Limited",
"DiscountPriceInfo": {
"OriginalRetailPrice": {
"amount": 119.95,
"currencyID": "USD"
},
"PricingTreatment": "STP",
"SoldOneBay": "true",
"SoldOffeBay": "false"
},
"GlobalShipping": "true"
}
}

eBay.getCatalogProductsByFilters

Instructions: All the fields do not have to be edited. The labels that are already included are hard coded by default values, but you can change it if needed.

Use case: Show a list of catalog products based on a keyword, description or color. (For example: Show all iPhone 6 on ebay).

Parameter Use Description
limit Use a 'number’ to limit the number of results you’re getting back from ebay for example: “4”.
searchQuery Comma separated list of filter names , name value pairs with values separated from the name by :. The values themselves may just be a single value, a set of values enclosed in { , } or a range of values (inclusive) enclosed in[, ], with the start and end of the range separated by … For example:
to to The object the returned items will be saved to. You can use #to to get the found items.

eBay.getCatalogProductsByUPI

Instructions: All the fields do not have to be edited. The labels that are already included are hard coded by default values, but you can change it if needed.

Use case: Simillar to the Product By Filters it’s giving back result with UPI which is a QR code explaining the item

Parameter Use Description
limit Use a 'number’ to limit the number of results you’re getting back from ebay for example: “4”.
searchQuery Comma separated list of filter names , name value pairs with values separated from the name by :. The values themselves may just be a single value, a set of values enclosed in { , } or a range of values (inclusive) enclosed in[, ], with the start and end of the range separated by … For example:
to to The object the returned items will be saved to. You can use #to to get the found items.

Errors

The Kittn API uses the following error codes:

Error Code Meaning
400 Bad Request – Your request sucks
401 Unauthorized – Your API key is wrong
403 Forbidden – The kitten requested is hidden for administrators only
404 Not Found – The specified kitten could not be found
405 Method Not Allowed – You tried to access a kitten with an invalid method
406 Not Acceptable – You requested a format that isn’t json
410 Gone – The kitten requested has been removed from our servers
418 I’m a teapot
429 Too Many Requests – You’re requesting too many kittens! Slow down!
500 Internal Server Error – We had a problem with our server. Try again later.
503 Service Unavailable – We’re temporarially offline for maintanance. Please try again later.