MisarMisar Docs
MisarMailMisarBlogMisarReachMisarPostMisarDevMisarCoderMisarSEOMisar PlatformMisar SSO
API Reference

Projects

List, create, read, update, and archive MisarSEO projects — /seo/projects and /seo/projects/:projectId.

A project owns a domain. Every audit, keyword, tracker, and report in MisarSEO is scoped to one.

List projects

GET/seo/projects

Returns every project in the caller's organization. Takes no parameters and is not rate limited.

This endpoint auto-creates

If the organization has no projects, one is created and returned. projects is never empty.

Response fields

projectsobject[]

Project records.

Request
curl https://api.misar.io/seo/projects \
  -H "Authorization: Bearer $MISARSEO_API_KEY"
200 — OK
{
  "projects": [
    { "id": "5b1c7d2e-…", "name": "Acme", "domain": "acme.com" }
  ]
}

Create a project

POST/seo/projects

Request body

namestringbodyrequired

Project name. Trimmed; must be non-empty.

domainstringbody

The primary domain this project tracks.

Response fields

projectobject

The created project.

Request
curl -X POST https://api.misar.io/seo/projects \
  -H "Authorization: Bearer $MISARSEO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Acme", "domain": "acme.com" }'
201 — Created
{ "project": { "id": "5b1c7d2e-…", "name": "Acme", "domain": "acme.com" } }

Rate limit: 30 requests per 60 s.

Get a project

GET/seo/projects/:projectId

Path parameters

projectIdstringpathrequired

Project id.

Response fields

projectobject

The project record.

Request
curl https://api.misar.io/seo/projects/5b1c7d2e-… \
  -H "Authorization: Bearer $MISARSEO_API_KEY"
200 — OK
{ "project": { "id": "5b1c7d2e-…", "name": "Acme", "domain": "acme.com" } }

Not rate limited.

Update a project

PATCH/seo/projects/:projectId

At least one of name or domain must be present. Omitted keys are left unchanged.

Request body

namestringbody

New name. Must be non-empty if supplied.

domainstring | nullbody

New domain. Pass null to clear it.

Response fields

projectobject

The updated project.

Request
curl -X PATCH https://api.misar.io/seo/projects/5b1c7d2e-… \
  -H "Authorization: Bearer $MISARSEO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "domain": "acme.io" }'
200 — OK
{ "project": { "id": "5b1c7d2e-…", "name": "Acme", "domain": "acme.io" } }

Rate limit: 30 requests per 60 s. Sending neither name nor domain, or an empty name, returns 400 VALIDATION_ERROR.

Archive a project

DELETE/seo/projects/:projectId

Archive, not delete

The project is archived, not destroyed. Its audits, keywords, and tracking history remain intact.

Response fields

successboolean

true when the project was archived.

Request
curl -X DELETE https://api.misar.io/seo/projects/5b1c7d2e-… \
  -H "Authorization: Bearer $MISARSEO_API_KEY"
200 — Archived
{ "success": true }

Rate limit: 30 requests per 60 s.

Status codes

CodeMeaning
200Read, updated, or archived
201Created
400VALIDATION_ERROR — invalid JSON, missing name, or no updatable keys
401UNAUTHENTICATED
404NOT_FOUND — no such project in your organization
429RATE_LIMITED — includes Retry-After

See Errors for the full code table.