{
  "@context": {
    "@vocab": "https://devmargin.app/schema#",
    "schema": "https://schema.org/",
    "xsd": "http://www.w3.org/2001/XMLSchema#",
    "dcterms": "http://purl.org/dc/terms/",
    "devmargin": "https://devmargin.app/schema#",
    "PushErrorBody": "devmargin:PushErrorBody",
    "error": {
      "@id": "devmargin:error",
      "@type": "xsd:string"
    },
    "V1ErrorBody": "devmargin:V1ErrorBody",
    "message": {
      "@id": "devmargin:message",
      "@type": "xsd:string"
    },
    "PushMetricsBody": "devmargin:PushMetricsBody",
    "channel": {
      "@id": "devmargin:channel",
      "@type": "xsd:string"
    },
    "metrics": {
      "@id": "devmargin:metrics"
    },
    "PushEarnedBody": "devmargin:PushEarnedBody",
    "earned": {
      "@id": "devmargin:earned"
    },
    "PushCostBody": "devmargin:PushCostBody",
    "project": {
      "@id": "devmargin:project",
      "@type": "xsd:string"
    },
    "cost": {
      "@id": "devmargin:cost"
    },
    "PushMetricsResult": "devmargin:PushMetricsResult",
    "ok": {
      "@id": "devmargin:ok",
      "@type": "xsd:boolean"
    },
    "stored": {
      "@id": "devmargin:stored",
      "@container": "@list"
    },
    "note": {
      "@id": "devmargin:note",
      "@type": "xsd:string"
    },
    "PushEarnedResult": "devmargin:PushEarnedResult",
    "month": {
      "@id": "devmargin:month",
      "@type": "xsd:string"
    },
    "status": {
      "@id": "devmargin:status",
      "@type": "xsd:string"
    },
    "PushCostResult": "devmargin:PushCostResult",
    "created": {
      "@id": "devmargin:created",
      "@type": "xsd:boolean"
    },
    "Portfolio": "devmargin:Portfolio",
    "pulledAt": {
      "@id": "devmargin:pulledAt",
      "@type": "xsd:dateTime"
    },
    "currency": {
      "@id": "devmargin:currency",
      "@type": "xsd:string"
    },
    "plan": {
      "@id": "devmargin:plan",
      "@type": "xsd:string"
    },
    "historyDays": {
      "@id": "devmargin:historyDays",
      "@type": "xsd:integer"
    },
    "windowNote": {
      "@id": "devmargin:windowNote",
      "@type": "xsd:string"
    },
    "portfolio": {
      "@id": "devmargin:portfolio"
    },
    "trend": {
      "@id": "devmargin:trend",
      "@container": "@list"
    },
    "earnedYear": {
      "@id": "devmargin:earnedYear",
      "@type": "xsd:integer"
    },
    "earnedThisYearUsd": {
      "@id": "devmargin:earnedThisYearUsd",
      "@type": "@id"
    },
    "earnedTotalUsd": {
      "@id": "devmargin:earnedTotalUsd",
      "@type": "@id"
    },
    "earnedThisMonthSoFarUsd": {
      "@id": "devmargin:earnedThisMonthSoFarUsd"
    },
    "earnedThisMonthMissingRails": {
      "@id": "devmargin:earnedThisMonthMissingRails",
      "@container": "@list"
    },
    "earnedSeries": {
      "@id": "devmargin:earnedSeries"
    },
    "projects": {
      "@id": "devmargin:projects",
      "@container": "@list"
    },
    "ProjectRow": "devmargin:ProjectRow",
    "name": {
      "@id": "devmargin:name",
      "@type": "xsd:string"
    },
    "mrrUsd": {
      "@id": "devmargin:mrrUsd",
      "@type": "@id"
    },
    "costMonthlyUsd": {
      "@id": "devmargin:costMonthlyUsd",
      "@type": "@id"
    },
    "netMonthlyUsd": {
      "@id": "devmargin:netMonthlyUsd",
      "@type": "@id"
    },
    "activeSubs": {
      "@id": "devmargin:activeSubs",
      "@type": "xsd:integer"
    },
    "users": {
      "@id": "devmargin:users",
      "@type": "xsd:integer"
    },
    "churnedSubs": {
      "@id": "devmargin:churnedSubs",
      "@type": "xsd:integer"
    },
    "oneOffRevenueUsd": {
      "@id": "devmargin:oneOffRevenueUsd"
    },
    "channels": {
      "@id": "devmargin:channels",
      "@container": "@list"
    },
    "NewCost": "devmargin:NewCost",
    "label": {
      "@id": "devmargin:label",
      "@type": "xsd:string"
    },
    "amount": {
      "@id": "devmargin:amount",
      "@type": "xsd:decimal"
    },
    "period": {
      "@id": "devmargin:period",
      "@type": "xsd:string"
    },
    "incurredOn": {
      "@id": "devmargin:incurredOn",
      "@type": "xsd:date"
    },
    "scope": {
      "@id": "devmargin:scope",
      "@type": "xsd:string"
    },
    "projectId": {
      "@id": "devmargin:projectId",
      "@type": "xsd:string"
    },
    "sharedProjects": {
      "@id": "devmargin:sharedProjects",
      "@container": "@list"
    }
  },
  "@type": "schema:Dataset",
  "schema:name": "DevMargin API JSON-LD context",
  "schema:description": "A JSON-LD @context for the objects DevMargin's own API contract declares: one class per component schema, one property per declared field, typed from the contract. Derived by script (derive-json-ld.py, 2026-11-05) from openapi/_original/devmargin-app-openapi-openapi.yml.",
  "dcterms:created": "2026-11-05",
  "dcterms:source": [
    "openapi/_original/devmargin-app-openapi-openapi.yml"
  ]
}