---
title: "Your first call — Anis Developers"
description: "Register the client, read your profile, and check your signature when something does not verify."
url: https://developers.anis.ly/docs/first-call/
language: en
---

> Every page of this documentation: https://developers.anis.ly/llms.txt

# Your first call

Once your key is active, read your profile. It is the simplest signed call, and it tells you what your application may do.

## With the .NET SDK

```csharp
builder.Services
    .AddAnisPartners(options => options.Authority = new Uri("https://<the address Anis gave you>"))
    .WithSigner(EcdsaP256Signer.FromPemFile("/secure/partner-key.pem", keyId));

// later, from the container:
var profile = await anis.Profile.GetAsync(ct);
Console.WriteLine(string.Join(", ", profile.Application!.Scopes));
```

See the [.NET SDK](https://developers.anis.ly/sdks/dotnet.md) page for settings files, key custody and the rest of the client.

## What comes back

[Read your profile](https://developers.anis.ly/reference/read-profile.md) returns your partner and application ids, the Anis business account you act for, and **the permissions your application has right now**. Permissions come from your application’s live policy and are checked on every call — a change by Anis staff applies to your next request, not your next restart — so read them rather than caching them.

## When a call is refused

Every refusal carries a `code` and a link to its page in [Error codes](https://developers.anis.ly/errors.md). The first ones you may meet:

| Code | Usually means |
| --- | --- |
| [`invalid_credentials`](https://developers.anis.ly/errors/invalid-credentials.md) | The key id, the key, the signature or the clock is wrong — or the key is not active yet |
| [`insufficient_scope`](https://developers.anis.ly/errors/insufficient-scope.md) | A missing permission, or a call from outside your allowed networks |

## Check your signature

If a signature will not verify, ask Anis what it saw: [Check your signature](https://developers.anis.ly/reference/check-signature.md) runs your call through all of Anis’s checks, changes nothing, and reports the method, address, path and query it signed over, the key it found and the permissions in force. It needs the `diagnostics:use` permission.

```csharp
var seen = await anis.Diagnostics.CheckSignatureAsync(ct);
Console.WriteLine($"{seen.Method} {seen.Authority}{seen.Path} ?{seen.CanonicalQuery} key {seen.KeyId}");
```

Compare each value with what you signed — it is almost always the address or the query.

> **If the self-check is refused too**
>
> Then the key itself is the problem: a key id that does not match the key file, a key not yet confirmed or already revoked, or a server clock that is not synchronised.
