Get Started
O Ally fornece uma API simples e poderosa em REST para integrar a busca de cursos em seu site ou aplicação.
A URL Base da API é
Configuração
Todas as requisições devem usar o schema https por questões de segurança.
A API aceita apenas o formato JSON, sendo assim todas as requisições usam content type application/json.
Utilizamos as seguintes convenções nesta documentação:
Convenção de Requisições
| Convenção | Descrição |
|---|---|
| :variable | Indica o nome de uma variável que precisa ser substituída em uma URL. |
| #{variable} | Indica o nome de uma variável que precisa ser substituída por valores da sua conta. |
| ... | Indica o conteúdo da resposta de uma requisição, que foi truncado para facilitar a leitura da documentação. |
| $ALLY_TOKEN | Indica o Token de Acesso |
Códigos de Retorno
A API retorna os códigos de resposta HTTP. Estas são as informações mais relevantes:
| Código | Descrição |
|---|---|
| 200 OK | A chamada foi bem sucedida |
| 400 Bad Request | A requisição é inválida, em geral conteúdo mal formado |
| 401 Unauthorized | O usuário e senha ou token de acesso são inválidos |
| 403 Forbidden | O acesso à API está bloqueado ou o usuário está bloqueado |
| 404 Not Found | O endereço acessado não existe |
| 422 Unprocessable Entity | A requisição é válida, mas os dados passados não são válidos |
| 429 Too Many Requests | O usuário atingiu o limite de requisições |
| 500 Internal Server Error | Houve um erro interno do servidor ao processar a requisição |
Segurança
Toda requisição realizada através da API deve utilizar o protocolo HTTPS pois estará passando informações de autenticação no cabeçalho da requisição.
As requisições realizadas na porta 80, serão automaticamente redirecionadas para a porta 443. Esta medida garante que nenhuma requisição realizada na API estará fora do protocolo seguro.
Todas as requisições realizadas nos servidores Ally serão criptografadas.
Autenticação
Basic Auth
Basic Authentication permite conectar APIs ao Ally fazendo a autenticação de usuários com um username e password. Para isso, o Ally inclui o nome e a senha do usuário, criptografados em base64, nos headers de todas as requisições feitas para a API.
Basic < Base64 encoded username and password >
Estudantes
| Recurso | Descrição |
|---|---|
| GET /api/v1/student | Lista paginada de estudantes |
Parâmetros
| Parâmetro | Obrigatório | Tipo | Tamanho | Descrição |
|---|---|---|---|---|
| page | Não | Integer | - | Número da página |
| likeQuery | Não | String | 120 | Filtra os estudantes que contenham a string informada em name, surname, email, code, phone1 ou phone2 |
{
"total":4,
"per_page":20,
"current_page":1,
"last_page":1,
"next_page_url":null,
"prev_page_url":null,
"from":1,
"to":20,
"data":[
{
"id":4555,
"code":500,
"name":"Primeira",
"surname":"Pessoa",
"fullName":"Primeira Pessoa",
"email":"primeira@pessoa.com",
"phone1":"99999999999",
"phone2":"88888888888",
},
{
"id":4556,
"code":501,
"name":"Segunda",
"surname":"Pessoa",
"fullName":"Segunda Pessoa",
"email":"segunda@pessoa.com",
"phone1":"99999999999",
"phone2":"88888888888",
},
{
"id":4557,
"code":502,
"name":"Terceira",
"surname":"Pessoa",
"fullName":"Terceira Pessoa",
"email":"terceira@pessoa.com",
"phone1":"99999999999",
"phone2":"88888888888",
},
{
"id":4558,
"code":503,
"name":"Quarta",
"surname":"Pessoa",
"fullName":"Quarta Pessoa",
"email":"quarta@pessoa.com",
"phone1":"99999999999",
"phone2":"88888888888",
},
]
}
| Recurso | Descrição |
|---|---|
| GET /api/v1/student/:id | Busca por um estudante específico |
Parâmetros
| Parâmetro | Obrigatório | Tipo | Tamanho | Descrição |
|---|---|---|---|---|
| :id | Sim | Integer | - | ID do Estudante |
{
"id":4555,
"code":500,
"name":"Primeira",
"surname":"Pessoa",
"fullName":"Primeira Pessoa",
"email":"primeira@pessoa.com",
"phone1":"99999999999",
"phone2":"88888888888",
}
Pastas
| Recurso | Descrição |
|---|---|
| GET /api/v1/folder | Lista de pastas |
Parâmetros
| Parâmetro | Obrigatório | Tipo | Tamanho | Descrição |
|---|---|---|---|---|
| student_id | Sim | Integer | - | ID do Estudante |
| likeQuery | Não | String | 120 | Filtra as pastas pelo name |
[
{
"id":37,
"name":"home",
"parent":null
},
{
"id":100,
"name":"Contratos",
"parent":{
"id":37,
"name":"home"
}
},
{
"id":101,
"name":"Fotos",
"parent":{
"id":100,
"name":"Contratos"
}
}
]
Arquivos
| Recurso | Descrição |
|---|---|
| GET /api/v1/file | Lista de arquivos |
Parâmetros
| Parâmetro | Obrigatório | Tipo | Tamanho | Descrição |
|---|---|---|---|---|
| student_id | Sim | Integer | - | ID do Estudante |
| likeQuery | Não | String | 120 | Filtra os arquivos pelo name |
[
{
"id":33,
"name":"exemplo_de_arquivo.png",
"folder_id":37,
"folder_name":"home",
"link":"https:\/\/s3.us-east-2.amazonaws.com\/student-docs\/1521211178.exemplo_de_arquivo.png",
"student_id":111
},
{
"id":34,
"name":"exemplo_de_arquivo_2.pdf",
"folder_id":37,
"folder_name":"home",
"link":"https:\/\/s3.us-east-2.amazonaws.com\/student-docs\/1521211178.exemplo_de_arquivo_2.pdf",
"student_id":111
}
]
| Recurso | Descrição |
|---|---|
| GET /api/v1/file/:id | Busca por um arquivo específico |
Parâmetros
| Parâmetro | Obrigatório | Tipo | Tamanho | Descrição |
|---|---|---|---|---|
| :id | Sim | Integer | - | ID do Arquivo |
| student_id | Sim | Integer | - | ID do Estudante |
{
"id":33,
"name":"exemplo_de_arquivo.png",
"folder_id":37,
"folder_name":"home",
"link":"https:\/\/s3.us-east-2.amazonaws.com\/student-docs\/1521211178.exemplo_de_arquivo.png",
"student_id":111
}
| Recurso | Descrição |
|---|---|
| POST /api/v1/file | Fazer upload de arquivo |
Parâmetros
| Parâmetro | Obrigatório | Tipo | Tamanho | Descrição |
|---|---|---|---|---|
| student_id | Sim | Integer | - | ID do Estudante |
| folder_id | Sim | Integer | - | ID da Pasta |
| file | Sim | File | 20MB | Arquivo selecionado (máx. 20MB) |
Caso o arquivo já exista (nomes idênticos) a api irá retornar:
{
"error":"File Duplicated"
}
| Recurso | Descrição |
|---|---|
| DELETE /api/v1/file/:id | Excluir um arquivo |
Parâmetros
| Parâmetro | Obrigatório | Tipo | Tamanho | Descrição |
|---|---|---|---|---|
| :id | Sim | Integer | - | ID do Arquivo |
Cidades
| Recurso | Descrição |
|---|---|
| GET /api/v1/city | Lista de cidades |
Parâmetros
| Parâmetro | Obrigatório | Tipo | Tamanho | Descrição |
|---|---|---|---|---|
| name | Não | String | 120 | Nome |
[
{
"id":1,
"code":"ee3107c2c20ba41fb6f435804b9b1b6f499f56d5",
"name":"Amparo, State of S\u00e3o Paulo, Brazil",
"country_code":"BR"
},
{
"id":2,
"code":"109dda35f4c11b490051baeae7f7474f51697ab0",
"name":"Brisbane, Queensland, Australia",
"country_code":"AU"
}
]
Países
| Recurso | Descrição |
|---|---|
| GET /api/v1/country | Lista de países |
Parâmetros
| Parâmetro | Obrigatório | Tipo | Tamanho | Descrição |
|---|---|---|---|---|
| name | Não | String | 120 | Nome |
| code | Não | String | 2 | ISO-3166 Country Alpha-2 Code |
[
{
"id":1,
"code":"AU",
"name":"Australia",
},
{
"id":2,
"code":"BR"
"name":"Brazil",
}
]
Nacionalidades
| Recurso | Descrição |
|---|---|
| GET /api/v1/nationality | Lista de nacionalidades |
Parâmetros
| Parâmetro | Obrigatório | Tipo | Tamanho | Descrição |
|---|---|---|---|---|
| country | Não | String | 120 | País |
| nationality | Não | String | 255 | ISO-3166 Country |
[
{
"country":"Australia",
"nationality":"Australian",
"flag":"Australia.png",
},
{
"country":"Brazil",
"nationality":"Brazilian",
"flag":"Brazil.png",
}
]
Escolas
| Recurso | Descrição |
|---|---|
| GET /api/v1/school | Lista de escolas |
Parâmetros
| Parâmetro | Obrigatório | Tipo | Tamanho | Descrição |
|---|---|---|---|---|
| city_id | Não | Number | id da cidade | |
| country_code | Não | Number | 2 | ISO-3166 Country Alpha-2 Code |
| name | Não | String | 255 | Nome |
| lat | Não | String | 55 | geolocation latitude? |
| lon | Não | String | 55 | geolocation longitude? |
[
{
"id":1,
"name":"SELC - English Language Centres",
},
{
"id":2,
"name":"Embassy English",
}
]
Cursos
| Recurso | Descrição |
|---|---|
| GET /api/v1/course | Lista de cursos |
Parâmetros
| Parâmetro | Obrigatório | Tipo | Tamanho | Descrição |
|---|---|---|---|---|
| page | Não | Number | Número da página | |
| per_page | Não | Number | Quantidade de resultados por página | |
| country | Sim | String | 255 | Nome do país da Nacionalidade do Estudante |
| school_city_id | Não | Number | id da cidade destino | |
| school_country_code | Não | String | 2 | código do país destino |
| course_name | Não | String | 255 | nome do curso |
| school_id | Não | Number | id da escola | |
| enrolDate | Não | String | 20 | data de matrícula |
| filterValue | Não | Boolean | Usar Filtro de valores (1,0) | |
| fromValue | Não | Float | Valor mínimo | |
| toValue | Não | Float | Valor máximo | |
| duration | Não | Number | quantidade em duração (período estudado) | |
| durationType | Não | String | tipo da quantidade (day, week, month, year) (período estudado) | |
| workload | Não | String | Carga horária (basic, standard, intensive, semi-intensive, super-intensive) | |
| durationInt | Não | String | Carga Horária por Semana | |
| durationDic | Não | String | Tipo da Carga Horária por Semana (hours || lessons) | |
| category_id | Não | Number | Veja abaixo | |
| class_period | Não | Number | Veja abaixo |
'Language Program' = 1
'Exam Preparation' = 2
'Professional Qualification' = 3
'High School' = 4
'Package' = 5
'Kids & Junior & Teen' = 6
'Offshore' = 7
'Onshore' = 8
'Work & Study' = 9
'Volunteer Experience' = 10
HORÁRIO DE AULA : class_period
- AM || Morning = 1
- PM || Afternoon = 2
- Evening || Night = 3
- Full-Time || Full Time = 4
- Part-Time || Part Time = 5
[
{
"id":413040,
"courseCampus_id":147328,
"startDate":"2019-07-10",
"endDate":"2019-11-01",
"duration":6,
"price":
{
"account_id":455,
"base_id":200996,
"begin":1,
"default_id":null,
"end":6,
"enrollmentValue":0,
"fixed":0,
"group":
{
"code":"LAT",
"name":"Latin Americans",
"public":1,
"account_id":1,
"country":
[
{
"code":"GT",
"name":"Guatemala"
},
{
"code":"BZ",
"name":"Belize"
},
{
"code":"SD",
"name":"Sudan"
},
{
"code":"NI",
"name":"Nicaragua"
},
{
"code":"CO",
"name":"Colombia"
},
{
"code":"VE",
"name":"Venezuela"
},
{
"code":"GF",
"name":"French Guiana"
},
{
"code":"SR",
"name":"Suriname"
},
{
"code":"EC",
"name":"Ecuador"
},
{
"code":"PE",
"name":"Peru"
},
{
"code":"BO",
"name":"Bolivia"
},
{
"code":"PY",
"name":"Paraguay"
},
{
"code":"CL",
"name":"Chile"
},
{
"code":"UY",
"name":"Uruguay"
},
{
"code":"AR",
"name":"Argentina"
},
{
"code":"BR",
"name":"Brazil"
},
{
"code":"MX",
"name":"Mexico"
}
]
},
"group_code":"LAT",
"id":14505545,
"materialFixed":1,
"materialValue":60,
"periodType":"week",
"priority":null,
"type":1,
"date":null,
"value":235,
"sumMaterialValue":60
},
"specialrate":[],
"materialActive":"yes",
"enrolActive":"no",
"sumThisValue":1470,
"onlyCourse":1410,
"onlyEnrol":0,
"onlyMaterial":60,
"totalThisCourse":
{
"currency":"AU$",
"value":1470,
"onlyCourse":1410,
"onlyMaterial":60,
"onlyEnrol":0
},
"course":
{
"id":147328,
"hasSR":0,
"startDate":"2019-01-01",
"dueDate":"2019-12-31",
"description":null,
"descriptionCourse":null,
"course_id":138960,
"campus_id":5022,
"reviewed_at":null,
"checked_at":"2019-01-21 13:26:23",
"account_id":null,
"published":1,
"course":
{
"id":138960,
"name":"GE Semi-Intensive 18 lessons\/wk",
"periodDic":5,
"typeDic":null,
"package":null,
"deleted_at":null,
"created_at":"2019-01-14 19:26:51",
"updated_at":"2019-01-14 19:26:51",
"courseinfo":null,
"category":
[
{
"course_id":138960,
"typeDic":1,
"type_dic":
{
"id":1,
"name":"Language Program"
}
}
]
,
},
"campus":
{
"id":5022,
"name":"MIILA Montreal",
"school_id":1887,
"email":"info@miila.ca",
"phone":"(514) 509-4242",
"address":"8255 Mountain Sights \u2013 Suite 150\n Montreal, Quebec\nH4P 2B5 CANADA",
"city_id":82,
"currency_code":"CAD",
"updated_at":"2019-06-14 19:07:28",
"site":"http:\/\/miila.ca\/",
"youtube":"https:\/\/www.youtube.com\/watch?v=5vfWF2GPWEw",
"description":"Opening hours:\nMonday to Friday \u2013 9:00 am to 6:00 pm \n(EST \u2013 Eastern Standard Time)\n\nClosest subway stations:\nDe La Savane (orange line)",
"description_pt":"Hor\u00e1rio de Funcionamento:\nSegunda a sexta-feira - 9:00 am a 6:00 pm\n(EST \u2013 Eastern Standard Time)\n\nEsta\u00e7\u00f5es de metr\u00f4 mais pr\u00f3ximas:\nDe La Savane (linha laranja)",
"description_es":"Horas de Oficina:\nLunes a viernes - 9:00 am a 6:00 pm\n(EST \u2013 Eastern Standard Time)\n\nEstaciones de metro m\u00e1s cercanas:\nDe La Savane (l\u00ednea laranja)",
"city":
{
"id":82,
"code":"64f76606728b9536f3b6f03703a296affd47ca6c",
"name":"Montreal, QC, Canada",
"country_code":"CA",
"created_at":"2016-04-28 10:44:07",
"updated_at":"2016-04-28 10:44:07",
"country":
{
"code":"CA",
"name":"Canada",
"nationality":
{
"country":"Canada",
"nationality":"Canadian",
"flag":"Canada.png"
}
}
},
"currency":
{
"code":"CAD",
"symbol":"CA$",
"name":"Canadian Dollar"
},
"holidays":[],
"campusinfo":null,
"mix":[],
"facilities":
[
{
"id":3020,
"campusfacilityDic":9,
"campus_id":5022,
"facility":
{
"id":9,
"name":"Wi-Fi",
"icon":"fa-wifi"
}
},
{
"id":3021,
"campusfacilityDic":10,
"campus_id":5022,
"facility":
{
"id":10,
"name":"Garden \/ Lounge",
"icon":"fa-tree"
}
},
{
"id":3022,
"campusfacilityDic":4,
"campus_id":5022,
"facility":
{
"id":4,
"name":"Kitchen",
"icon":"fa-cutlery"
}
},
{
"id":3023,
"campusfacilityDic":7,
"campus_id":5022,
"facility":
{
"id":7,
"name":"Computer lab",
"icon":"fa-laptop"
}
}
]
,
"schoolinfo":
{
"id":1887,
"name":"MIILA - Montreal International Institute of Language Arts",
"published":1,
"deleted_at":null,
"created_at":"0000-00-00 00:00:00",
"updated_at":"2019-06-14 19:07:28",
"account_id":1,
"bannerUrl":"https:\/\/s3.amazonaws.com\/schools-price-lists\/1547493318.jpg",
"description":"A one-of-a-kind language school which effort\u00adlessly com\u00adbines a dynamic learning envi\u00adron\u00adment, a friendly and wel\u00adcom\u00ading atmos\u00adphere and modern facilities.",
"description_pt":"Uma escola de idiomas \u00fanica que combina facilmente um ambiente din\u00e2mico de aprendizado, uma atmosfera amig\u00e1vel e acolhedora e instala\u00e7\u00f5es modernas.",
"description_es":"Una escuela de idiomas \u00fanica en su clase que combina sin esfuerzo un entorno de aprendizaje din\u00e1mico, un ambiente agradable y acogedor e instalaciones modernas."
}
}
}
}
]
Agências
| Recurso | Descrição |
|---|---|
| GET /api/v1/agency | Lista de agências |
Parâmetros
| Parâmetro | Obrigatório | Tipo | Tamanho | Descrição |
|---|---|---|---|---|
| city_id | Não | Number | id da cidade | |
| country_code | Não | Number | 2 | ISO-3166 Country Alpha-2 Code |
| name | Não | String | 255 | Nome |
| lat | Não | String | 55 | geolocation latitude? |
| lon | Não | String | 55 | geolocation longitude? |
[
{
"id":1,
"name":"Agencia Teste 1",
"country_code":"BR",
"lat": 39.0438,
"lon": -77.4874
},
{
"id":2,
"name":"Agencia Teste 2",
"country_code":"AU",
"lat": 39.0438,
"lon": -77.4874
}
]