Problem with ocelus API

I can use the web interface but not the API for ocelus. In particular, that call results in the following output (the license key works for the web interface):

curl -F "image=@WIN_20250916_11_03_32_Pro.jpg" --header "API-KEY: MY KEY" https://ocelus.teklia.com/api/v1/transcribe/

this returns an HTML (not a json)

<!DOCTYPE html>
<html>
<head>
  <meta content="width=device-width, initial-scale=1, maximum-scale=1" name="viewport">
  <title>The page you're looking for could not be found (404)</title>
  <style>
    :root {
      --background: white;
      --border: #dcdcde;
      --color: #3a383f;
      --subtle: #626168;
      --link: #0b5cad;

      background-color: var(--background);
      color: var(--color);
    }

    body {
      text-align: center;
      font-family: "GitLab Sans", -apple-system, BlinkMacSystemFont,
        "Segoe UI", Roboto, "Noto Sans", Ubuntu, Cantarell, "Helvetica Neue",
        sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",
        "Noto Color Emoji";
      margin: auto;
      font-size: 14px;
    }

    h1 {
      font-size: 56px;
      line-height: 100px;
      font-weight: 400;
      color: var(--subtle);
    }

    h2 {
      color: var(--subtle);
      font-size: 20px;
      font-weight: 400;
      line-height: 28px;
    }

    hr {
      max-width: 800px;
      margin: 18px auto;
      border: 0;
      border-top: 1px solid var(--border);
      border-bottom: 1px solid var(--background);
    }

    img {
      max-width: 40vw;
      display: block;
      margin: 40px auto;
    }

    a {
      line-height: 100px;
      font-weight: 400;
      color: var(--link);
      font-size: 18px;
      text-decoration: none;
    }

    .container {
      margin: auto 20px;
    }

    .go-back {
      display: none;
    }

    @media (prefers-color-scheme: dark) {
      :root {
        --background: #18171d;
        --border: #4c4b51;
        --color: #ececef;
        --subtle: #bfbfc3;
        --link: #9dc7f1;
      }
    }
  </style>
</head>

<body>
  <img src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjE5MiIgdmlld0JveD0iMCAwIDI1IDI0IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxwYXRoIGQ9Im0yNC41MDcgOS41LS4wMzQtLjA5TDIxLjA4Mi41NjJhLjg5Ni44OTYgMCAwIDAtMS42OTQuMDkxbC0yLjI5IDcuMDFINy44MjVMNS41MzUuNjUzYS44OTguODk4IDAgMCAwLTEuNjk0LS4wOUwuNDUxIDkuNDExLjQxNiA5LjVhNi4yOTcgNi4yOTcgMCAwIDAgMi4wOSA3LjI3OGwuMDEyLjAxLjAzLjAyMiA1LjE2IDMuODY3IDIuNTYgMS45MzUgMS41NTQgMS4xNzZhMS4wNTEgMS4wNTEgMCAwIDAgMS4yNjggMGwxLjU1NS0xLjE3NiAyLjU2LTEuOTM1IDUuMTk3LTMuODkuMDE0LS4wMUE2LjI5NyA2LjI5NyAwIDAgMCAyNC41MDcgOS41WiIKICAgICAgICBmaWxsPSIjRTI0MzI5Ii8+CiAgPHBhdGggZD0ibTI0LjUwNyA5LjUtLjAzNC0uMDlhMTEuNDQgMTEuNDQgMCAwIDAtNC41NiAyLjA1MWwtNy40NDcgNS42MzIgNC43NDIgMy41ODQgNS4xOTctMy44OS4wMTQtLjAxQTYuMjk3IDYuMjk3IDAgMCAwIDI0LjUwNyA5LjVaIgogICAgICAgIGZpbGw9IiNGQzZEMjYiLz4KICA8cGF0aCBkPSJtNy43MDcgMjAuNjc3IDIuNTYgMS45MzUgMS41NTUgMS4xNzZhMS4wNTEgMS4wNTEgMCAwIDAgMS4yNjggMGwxLjU1NS0xLjE3NiAyLjU2LTEuOTM1LTQuNzQzLTMuNTg0LTQuNzU1IDMuNTg0WiIKICAgICAgICBmaWxsPSIjRkNBMzI2Ii8+CiAgPHBhdGggZD0iTTUuMDEgMTEuNDYxYTExLjQzIDExLjQzIDAgMCAwLTQuNTYtMi4wNUwuNDE2IDkuNWE2LjI5NyA2LjI5NyAwIDAgMCAyLjA5IDcuMjc4bC4wMTIuMDEuMDMuMDIyIDUuMTYgMy44NjcgNC43NDUtMy41ODQtNy40NDQtNS42MzJaIgogICAgICAgIGZpbGw9IiNGQzZEMjYiLz4KPC9zdmc+Cg=="
       alt="GitLab Logo" />
  <h1>
    404
  </h1>
  <div class="container">
    <h2>The page you're looking for could not be found.</h2>
    <hr />
    <p>The resource that you are attempting to access does not exist or you don't have the necessary permissions to view it.</p>
     <p>Make sure the address is correct and that the page hasn't moved.</p>
     <p>Please contact your GitLab administrator if you think this is a mistake.</p>
    <a href="javascript:history.back()" class="js-go-back go-back">Go back</a>
  </div>
  <script>
    (function () {
      var goBack = document.querySelector('.js-go-back');

      if (history.length > 1) {
        goBack.style.display = 'inline';
      }
    })();
  </script>
</body>
</html>

thanks for any hints!

Hello,

The web interface is hosted at ocelus.teklia.com, but the API lives at atr.ocelus.teklia.com

You can find the API Documentation there.

So your API call should use https://atr.ocelus.teklia.com/api/v1/transcribe/

Hope that helps !

Hi!

thanks for that. It seems the documentation on this page needs to be updated in that case because it shows

curl -F "image=@letter.png" \
 --header "API-Key: YOUR-KEY-HERE" \
 https://ocelus.teklia.com/api/v1/transcribe/

Now with the correct URL I get a bit further, but now I get a license error returned:

{"detail":"The provided license is not valid or has no credit left."}⏎    

I was assuming that going here and inserting my email address gives me a valid license for this API? I just copied the final part of the string displayed in the confirmation message that comes up in my browser after I click on the verification link in my email. Is that not the correct API key? thanks

Hello Florian,

I just sent you an email with the full API key to avoid any error.

I’ve also credited you with 40 free API calls to transcribe your documents.

I hope that helps you trying out the API, feel free to ask for more info or credits !

Have a nice day,

Bastien Abadie
Teklia

hey! cool it works! I think the issue were the credits (the key was the one I had used).
Say - what’s my allowance for those credits ? I understand now I have about 30 left (I transcribed 10 sample pages). Do I have to pay to get more credits? how much? thanks