# API 1:1 ### **CREDENCIAL** ```yaml POST: https://api4.oystr.com.br/credentials/validate/:botId/v3.0.0-dev ``` #### **USUÁRIO E SENHA (UP)** objeto ***“credentials”***, com par **usuário e senha**, será utilizado pelo robô para conseguir acesso ao sistema no qual ele irá executar as tarefas. Por exemplo, em um robô de tribunal onde a tarefa é obter a última movimentação processual, esse usuário/senha será utilizado para entrar no sistema do tribunal. Quando informado na requisição (via arquivo ***payload*** ou especificado no ***body*** da requisição), é necessário seguir o formato abaixo: ```json { "username": "...", "password": "...", "credentialsOption": "..." } ``` ##### **Parâmetros**
ParâmetroTipoDescrição
**username***String (obrigatório)*Usuário utilizado para acessar o sistema em que o robô irá executar a tarefa.
**password***String (obrigatório)*Senha correspondente ao usuário informado.
**credentialsOption***String (opcional)*Valor opcional que será informado indicando particularidades das opções informadas. Quando necessário, a documentação do robô irá apontar.
#### **CERTIFICADO A1 (CP)** O objeto *“credentials”* com certificado A1 será utilizado pelo robô para conseguir acesso ao sistema no qual ele irá executar as tarefas. Por exemplo, em um robô unificado intimações onde a tarefa é obter a todas as intimações disponíveis para o advogado em diversos tribunais do Brasil, esse certificado A1 será utilizado para entrar no sistema de cada tribunal especificado. Quando informado na requisição (via arquivo ***payload*** ou especificado no ***body*** da requisição), é necessário seguir o formato abaixo: ``` { "username": "...", "base64Cert": "...", "pin": "...", "credentialsOption": "..." } ``` ##### **Parâmetros**
ParâmetroTipoDescrição
**username***String (obrigatório)*Usuário utilizado para acessar o sistema em que o robô irá executar a tarefa.
**base64Cert***String (obrigatório)*Conteúdo do certificado A1 codificado em [Base64](https://pt.wikipedia.org/wiki/Base64)
**pin***String (obrigatório)*PIN ou senha utilizada para utilizar o certificado.
**pin***String (opcional)*Valor opcional que será informado indicando particularidades das opções informadas. Quando necessário, a documentação do robô irá apontar.
### **Criação da Execução 1:1** ```yaml POST: https://api4.oystr.com.br/v1/execute/single ``` **Código de retorno**
**Retorno****Descrição**
202inicia a execução de um ítem. Retona o id para consulta futur
5xx ou 4xxFalha ao iniciar a execução do ítem. Nestes casos é necessário utilizar (manualmente via suporte) o header X-Oystr-TraceId retornado para verificar se o ítem foi recebido pela API e está em execução ou não.
**Formato da Requisição (via HTTP)** ```json { "dry": false, "bot": "", "version": "", "cid": "", "timeout": "", "deadline": "", "credentials": { "username": "", "password": "" }, "data": {}, "files": [{ "bound": true, "property": "", "description": "", "name": "", "data": "" }] } ```
**CAMPO****Obrigatório****Formato****Default****Descrição**
dryNãoBooleanfalseIndica se é uma execução de teste
botSimString Id do robô
versionSimString Versão do robô
cidNãoStringvazioIdentificador único da requisição¹
forceNãoBooleanvazioIndica se um item único, discriminado pelo cid deve ser reexecutado ou não
timeoutNãoDuration5 minutosTempo máximo aguardando o retorno de um item desde o início da execução². Exemplo: 30s
deadlineNãoZonedDateTimevazioData máxima para o início da execução do item³ no formato ISO 8601. Exemplo 2022-01-01T00:00:00.0-03:00
credentialsRobôjson Credenciais usadas na requisição
dataSimjson Dados passados diretamente para o robô. Cada robô possuí um formato específico.
fileRobôjson Arquivos passados para o robô
1. ID usado para evitar requisições duplicadas. Caso o cid não seja único a resposta será do tipo Duplicate . Caso o cid seja inválido a requisição será rejeitada 2. . Após este período a resposta será do tipo Timeout 3. Caso a execução do ítem não tenha iniciado até esta data a resposta será do tipo Overdue. ### **Retorno da chamada (assíncrono)** ```yaml GET: https://api.oystr.com.br/v1/execute/single/:bot/:cached?format=latest ``` **Código de retorno**
**Retorno****Descrição**
404id inválido ou ítem rejeitado. Nunca haverá uma resposta para este item.
202Reposta indisponível, aguarde
200Resposta disponível
**Resultados** Os resultados ficam disponíveis no endereço /execute/single/\[bot-id\]/\[id\]?format=\[legacy|latest\] de acordo com o header X-Oystr-ReturnPath. O payload recebido depende do valor da variável forma **Formato Legado** QueryString: format=legacy ```json { "type": "", "payload": {} } ``` **Formato Recomendado** QueryString: format=latest O payload em json obtido quando a resposta está disponível segue o seguinte modelo: ```json { "account": 0, "user": 0, "bot": "", "version": "", "cid": "", "request": "", "started": "", "ended": "", "taskTime": "", "timeout": "", "finishedAs": "", "retry": "", "dry": false, "result": {} } ```
**Campo****Formato****Descrição**
accountLongConta que realizou a requisição
userLongUsuário que realizou a requisição
botStringRobô
versionStringVersão do robô
cidStringid de integração
requestStringId da requisição
startedZonedDateTimeData de início da execução do item no formato ISO-8601
endedZonedDateTimeData de início da execução do item no formato ISO-8601
taskTimeDurationTempo de execução do item
timeoutDurationTimeout efetivamente usado
retryEnumindica se é possível re-executar o item
dryJsonIndica se é uma execução DE TESTE
finishedAsEnumTipo de resultado (tabela abaixo)
resultJsonPayload com o resultado
#### **Tipos de retorno** Os tipos de resultados possíveis:
**Resposta****Permite Reexecução****Origem****Descrição**
Response BotResposta válida
PartialResponse
NotAllowed BotNão é permitida a execução do item
NotFound BotItem não encontrado
NotConsistent BotDados inconsistentes
NotAvailable BotItem não disponivel
ProxyErrorSimBotErro de proxy
CaptchaErrorSimBotErro de captcha
Forbidden BotExecução do item não é permitida
BotError BotErro no robô
OtherNãoBotOutros
RequestHasViolationsNãoInfraPedido contém informações inválidas. O item não foi executado.
NotAndApiRequestNãoInfraFormato inválido de requisição. O item não foi executado
NotAcceptedNãoInfraExecução do item nõa foi aceita. O item pode ou não ter sido executado
TimeoutNãoInfraTimeout durante a execução do item. O item pode ou não ter sido executado
OverdueNãoInfraExecução do item ocorreria apís o deadline. Item não foi executado
DuplicateNãoInfraItem duplicado baseado no cid. Item não foi executado
UnexpectedErrorNãoInfraErro inesperado. O item pode ou não ter sido executado
UnknownNãoInfraDesconhecido. O item pode ou nõa ter sido executado
#### **Requisições Duplicadas** A Oystr não testa os dados enviados para a execução com a exceção dos atributos cid e force . Caso o cid esteja presente na requisição, a Oystr fará a verificação se este cid foi executado nos últimos 15 dias para esta conta e robô. Caso o cid seja "duplicado", o ítem será executado apenas se o parâmetro force estiver presente com o valor true , caso contrário a resposta do ítem será do tipo Duplicate . A Oystr emprega uma estratégia estatística para verifica ser o ítem já foi executado. Esta estratégia permite falsos positivos, ou seja: 1. ítem não foi executado (com certeza) para esta conta e robô nos últimos 15 dias, ou2 2. . ítem possivelmente já foi executado antes (false positivo) Um cid , se presente, deve ter entre 1 e 50 carateres alphanuméricos ou '-' de acordo com a seguinte expressão regular: \[0-9a-zA-Z\\\\-\]{1,50} . Caso o cid seja inválido o ítem não será executado, a requisição será ignorada e ficará sem resposta, retornando 404 em consultas futuras. #### **Reexecução** Em alguns casos é possível que um ítem seja reexecutado em caso de erro, mesmo que um cid tenha sido utilizado. Os critérios que definem se um ítem pode ou não ser reexecutado ficam a cargo do cliente da API que deve observar os seguintes critérios: 1. Se houve uma execução anterior "do mesmo" íten, esta deve ter retornado como insucesso, com o parâmetro retry = SAFE . Caso contrário não é seguro reexecutar o ítem. 2. . Caso um cid seja utilizado, ele deve ser único ou o parâmetro force = true deve ser utilziado para ignorar o teste de duplicidade. A Oystr não verifica se a requisição anterior retornou com retry = SAFE durante a nova execução, mesmo que o cid seja o mesmo. Esta verificação fica a cargo do cliente/usuário da api.