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.