Skip to content

Quickstart

Set deployment-specific secrets outside source control:

export OKATANA_URL="https://okatana.example.com"
export OKATANA_API_KEY="oka_public.secret"
export OKATANA_ORGANIZATION_ID="01..."

Create the client:

using Newfoundcodes.Okatana;
using Newfoundcodes.Okatana.Models;
using Newfoundcodes.Okatana.Requests;

using var client = new OkatanaClient(new OkatanaClientOptions
{
    BaseUrl = Environment.GetEnvironmentVariable("OKATANA_URL")!,
    ApiKey = Environment.GetEnvironmentVariable("OKATANA_API_KEY")!
});

Read an organization and create a project:

var organizationId = Environment.GetEnvironmentVariable("OKATANA_ORGANIZATION_ID")!;
var organization = await client.Organizations.GetAsync(organizationId);

var project = await client.Organizations.CreateProjectAsync(organizationId,
    new CreateProjectRequest
    {
        Name = "Platform",
        Key = "PLAT",
        Description = "Platform engineering work"
    });

Create a board and ticket:

var board = await client.Projects.CreateBoardAsync(project.Id,
    new CreateBoardRequest { Name = "Open" });

var ticket = await client.Projects.CreateTicketAsync(project.Id,
    new CreateTicketRequest
    {
        BoardId = board.Id,
        Title = "Create deployment runbook",
        Priority = TicketPriority.High
    });

Move the ticket and comment:

var boards = await client.Projects.ListBoardsAsync(project.Id);
var done = boards.First(x => x.IsDone);

await client.Tickets.MoveAsync(ticket.Id,
    new MoveTicketRequest { BoardId = done.Id });

await client.Tickets.CreateCommentAsync(ticket.Id,
    new CreateTicketCommentRequest
    {
        BodyHtml = "<p>Completed by automation.</p>"
    });

For large ticket or document sets, use the async iterators rather than manually calculating page numbers.