Pular para o conteúdo principal

Erros e paginação

Este guia descreve como a API da Rently comunica os erros (estrutura JSON e códigos), o que significam os códigos de status HTTP mais comuns, e como percorrer respostas paginadas com os parâmetros offset e limit.

Todos os exemplos assumem que você já obteve um token Bearer. Consulte o guia de autenticação para o detalhe do fluxo. O header de autorização é enviado em cada chamada:

Authorization: Bearer {token}

Formato de erros

Quando uma requisição não pode ser concluída por um erro de negócio ou de validação, a API responde com um corpo JSON com a seguinte estrutura:

CampoTipoDescrição
ErrorMessagestring (nullable)Mensagem legível que descreve o erro.
ErrorCodeintegerCódigo numérico que identifica o tipo de erro (ver tabela de códigos).
Idstring (nullable)Identificador de correlação para rastrear o erro no suporte.
observação

ErrorCode é sempre serializado como número inteiro, não como texto. Por exemplo, 1 corresponde a CustomerNotFound.

Exemplo de resposta de erro

{
"ErrorMessage": "The requested resource was not found",
"ErrorCode": 1,
"Id": "0HMVB9A2K3C4D-00000001"
}
dica

Guarde o valor de Id nos seus logs. É o identificador de correlação que permite ao suporte da Rently localizar o trace exato da requisição que falhou.

Códigos de erro (ErrorCode)

O campo ErrorCode vem de uma enumeração com valores numéricos. A tabela a seguir lista todos os códigos de erro que a API pode retornar:

CodeNameDescription
0NoErrorNenhum erro ocorreu.
1CustomerNotFoundO cliente solicitado não foi encontrado no sistema.
2CarNotFoundO carro solicitado não foi encontrado no sistema.
3CarNotAvailableO carro solicitado não está disponível para as datas especificadas.
4PriceMismatchO preço calculado não corresponde ao preço esperado.
5CustomerDataNotValidOs dados do cliente fornecidos não são válidos.
6LanguageNotSupportedO idioma solicitado não é suportado pelo sistema.
7InsuficientPermissionsO usuário não possui permissões suficientes para realizar a operação.
8BookingNotFoundForCustomerNenhuma reserva foi encontrada para o cliente especificado.
9BookingStatusNotAllowCancelO status atual da reserva não permite cancelamento.
10CreditCardNotAvailableO cartão de crédito não está disponível para uso.
11GatewayNotSupportedO gateway de pagamento solicitado não é suportado.
12InfractionNotFoundA infração solicitada não foi encontrada.
13InvlaidDatesAs datas fornecidas são inválidas.
14UnquotedReserveA reserva não foi cotada.
15MaxDayForQuotedReserveO número máximo de dias para uma reserva cotada foi excedido.
21TariffNotFoundA tarifa solicitada não foi encontrada.
22BookingNotFoundA reserva solicitada não foi encontrada.
23ReturnPlaceNotFoundO local de devolução especificado não foi encontrado.
24PromotionNotFoundA promoção solicitada não foi encontrada.
25DeliveryPlaceNotFoundO local de entrega especificado não foi encontrado.
26BookingStatusNotAllowUpdateO status atual da reserva não permite atualizações.
27IlimitedKmNotEnabledA opção de quilometragem ilimitada não está habilitada.
28LimitedKmNotEnabledA opção de quilometragem limitada não está habilitada.
29MinimunDaysOfBookingNotReachedO número mínimo de dias para a reserva não foi atingido.
30MaxDaysOfBookingReachedO número máximo de dias para a reserva foi excedido.
31AdditionalNotFoundO item adicional solicitado não foi encontrado.
32AdditionalMaxQuantityExceededA quantidade máxima para o item adicional foi excedida.
33DateFromForBookingNotEnabledA data de início da reserva não está habilitada.
34DriverAgeNotAllowedA idade do condutor não está dentro da faixa permitida.
35BookingVersionErrorHá uma divergência de versão com a reserva.
36BookingAlreadyDeliveredA reserva já foi entregue.
37BookingAlreadyReturnedA reserva já foi devolvida.
38BookingNeedsToCompleteDepositA reserva requer um depósito para ser concluída.
39InvalidCarKilometersO valor de quilometragem do carro é inválido.
40BookingStatusNotAllowDeliveryO status atual da reserva não permite a entrega.
41DriverLicenseInvalidA carteira de habilitação do condutor é inválida.
42BookingStatusNotAllowReturnO status atual da reserva não permite a devolução.
43NotificationRelatedEntityNotFoundA entidade relacionada à notificação não foi encontrada.
44NotificationReceiverAddressInvalidO endereço do destinatário da notificação é inválido.
45MailNotificationDisabledAs notificações por e-mail estão desabilitadas.
46ReturnPlaceNotAllowedForDeliveryPlaceO local de devolução não é permitido para o local de entrega especificado.
47BookingOutOfOfficeHoursNotAllowedNão é permitido fazer reservas fora do horário de atendimento.
48NotificationNotFoundA notificação solicitada não foi encontrada.
49BlockedCustomerToBookO cliente está bloqueado para fazer reservas.
50MustHaveAtLeastOneInsuranceA configuração do sistema exige que pelo menos um seguro seja selecionado ao criar ou editar uma reserva.
51InvalidCommercialAgreementO acordo comercial é inválido.
60AppProtocolNotFoundO protocolo de aplicação não foi encontrado.
61ServiceTypeInvalidO tipo de serviço é inválido.
62ServiceStatusInvalidO status do serviço é inválido.
63ServiceDatesInvalidsAs datas do serviço são inválidas.
64ServiceProviderNotFoundO provedor de serviço não foi encontrado.
65ServiceCanNotCreateO serviço não pode ser criado.
66ServiceCanNotEditO serviço não pode ser editado.
67ServiceNotFoundO serviço solicitado não foi encontrado.
68CarLocationInvalidDriverA localização do carro possui um condutor inválido.
69ReturnPlaceIsCurrentPlaceErrorO local de devolução é o mesmo que o local atual.
70CarIsNotFreeO carro não está disponível para a operação solicitada.
71CarTransferErrorOcorreu um erro durante a transferência do carro.
72InvalidCarGasolineO nível de combustível do carro é inválido.
73CannotDeliverBookingWithBalanceNão é possível entregar uma reserva com saldo pendente.
74PlaceDoesNotAcceptCustomAddressesO local não aceita endereços personalizados.
75PlaceCantOperatesLikePickUpO local não pode operar como ponto de retirada.
76PlaceCantOperatesLikeDropOffO local não pode operar como ponto de devolução.
77CannotPayQuoteNão é possível pagar a cotação.
80FeatureNotEnabledO recurso solicitado não está habilitado.
98ModelNotValidO modelo não é válido.
99UnknownOcorreu um erro desconhecido.
100MissingCurrencyCodeO código da moeda está ausente.
101TotalGreaterThanZeroO valor total deve ser maior que zero.
102InfractionAlreadyExistsA ata de infração ou a violação já existe no sistema.
103InvalidIncidentTypeO tipo de incidente é inválido
104InvalidIncidentDateA data do incidente é inválida
105SettingNotFoundUma configuração obrigatória não foi encontrada
106BookingBrandNotFoundBooking Brand não encontrado
107BookingCannotBeUncancelled
108RateAlreadyExistsJá existe uma taxa com o código fornecido e atualizações não foram solicitadas.
499Timeout
1100MappingAlreadyExists
1101ModelNotExists
1102CompanyCodeNotFound
1103CommercialAgreementNotSupportedO acordo comercial não é suportado.
1104CommercialAgreementRequired
1105InfractionNoticeNotFoundO Aviso de Infração referenciado não foi encontrado para o inquilino.
1106InfractionNoticeDismissedO Aviso de Infração referenciado é rejeitado e não pode ser vinculado.
1107InfractionNoticeContextMismatchO contexto da infração (carro, data, reserva ou motorista) não corresponde ao Aviso de Infração.
1108InfractionNoticeMainAlreadyLinkedO InfractionNotice já tem uma infração principal vinculada.
1109InfractionNoticeNicAlreadyLinkedO InfractionNotice já tem uma infração NIC (penalidade por não identificação do motorista) vinculada.
1110InfractionNoticeInfractionAlreadyLinkedA infração já está ligada a outro Aviso de Infração.
aviso

Os valores numéricos não são contíguos: a enumeração pula posições (por exemplo, de 15 para 21). Mapeie suas tentativas e mensagens a partir do valor exato e não assuma intervalos correlativos.

Códigos de status HTTP

A API utiliza um conjunto restrito de códigos de status. Tenha em conta que as falhas de autenticação são reportadas como 403 (a API não devolve 401).

StatusSignificadoCorpo
200 OKA requisição foi processada corretamente.Payload do recurso ou resultado paginado.
400 Bad RequestErro de negócio ou de validação (Api Error).JSON com ErrorMessage, ErrorCode e Id.
403 ForbiddenUsuário não autenticado ou sem permissões para o endpoint.Sem corpo.
404 Not FoundO recurso solicitado não existe.Sem corpo.
observação

Um 403 pode significar tanto que o token é inválido ou ausente quanto que o usuário autenticado não tem a permissão exigida para esse endpoint. Verifique primeiro o header Authorization e depois as permissões do usuário.

Como tratar erros

  • 200 → processe a resposta normalmente.
  • 400 → leia ErrorCode para decidir a ação (corrigir dados, recotar, etc.) e mostre ErrorMessage ao operador.
  • 403 → verifique se o token é válido, está vigente e corresponde ao mesmo tenant; confirme que o usuário tem permissões.
  • 404 → o identificador usado não corresponde a nenhum recurso; valide os IDs antes de tentar de novo.

Paginação

Os endpoints que devolvem listas (por exemplo GET /api/bookings/list, GET /api/customers ou GET /api/cars) usam paginação por offset e limit.

Parâmetros de consulta

ParâmetroTipoDefaultDescrição
offsetinteger0Ponto de partida da página. Deve ser >= 0.
limitinteger30Quantidade máxima de elementos por página. É reduzido a um máximo de 100.
observação

Se você enviar um limit maior que 100, a API o reduz automaticamente a 100. Um offset negativo é normalizado para 0.

Forma do resultado

As respostas paginadas compartilham a mesma estrutura PagedResult:

CampoTipoDescrição
OffsetintegerOffset aplicado a esta página.
LimitintegerLimite aplicado a esta página.
TotalintegerTotal de elementos disponíveis em todas as páginas.
Resultsarray (nullable)Elementos da página atual.
NextOffsetintegerOffset a usar para solicitar a página seguinte.

Exemplo de resposta paginada

{
"Offset": 0,
"Limit": 30,
"Total": 2,
"Results": [
{ "Id": 1 },
{ "Id": 2 }
],
"NextOffset": 0
}

Exemplo de request

curl "https://{tenant}.rently.com.ar/api/customers?offset=0&limit=30&language=es-AR" \
-H "Authorization: Bearer {token}"

Como percorrer todas as páginas

Para iterar a totalidade de uma listagem, use NextOffset de cada resposta como offset da requisição seguinte. A iteração termina quando Results traz menos elementos que Limit.

# Página 1
curl "https://{tenant}.rently.com.ar/api/bookings/list?offset=0&limit=30&language=es-AR" \
-H "Authorization: Bearer {token}"

# Página 2: usar o NextOffset devolvido pela página anterior
curl "https://{tenant}.rently.com.ar/api/bookings/list?offset={NextOffset}&limit=30&language=es-AR" \
-H "Authorization: Bearer {token}"
dica

Para a iteração, observe Results.Count < Limit como condição de fim em vez de comparar contra Total. Isso funciona de forma consistente com ambos os estilos de paginação da API.

aviso

Em GET /api/bookings/list o parâmetro offset funciona como cursor por Id, não como quantidade de registros a pular. Passe sempre 0 na primeira chamada (independentemente da direção de ordenação) e, nas seguintes, o valor de NextOffset que a resposta anterior devolveu. Não construa o offset manualmente somando tamanhos de página.