Skip to content

V2: Project API Structure #12

@sylv256

Description

@sylv256

Projects should have metadata determined by uploaded JARs or manually set. Mod IDs are important because they will be used in ballotbox and modpack scripts.

Structure

In the project data

{
    "id": "abcde", // Project ID
    "type": "mod", // The type of the project
    "metadata": {
        "mod_id": "mod_id", // Unchangeable (from latest JAR), only for mod projects
        "name": "Mod Name",
        "description": "Mod Description", // Short-form Mod Description
        "source_url": "https://github.com/ModOwner/Mod"
    },
    "team": {
        "abcde": "Member" // User IDs
    },
    "permissions": {
        "abcde": "1" // 64-bit permission bitfield, 1 being Administrator (All Permissions)
    },
    "submissions": [
        "abcde" // Submission ID
    ]
}

In the submission data

{
    "id": "abcde", // Submission ID
    "theme_id": "abcde", // Theme ID
    "time_submitted": 1234567890,
    "project": {
        "id": "abcde", // Project ID
        "type": "mod", // The type of the project
        "metadata": {
            "mod_id": "mod_id", // Unchangeable (from latest JAR), only for mod projects
            "name": "Mod Name",
            "description": "Mod Description", // Short-form Mod Description
            "source_url": "https://github.com/ModOwner/Mod"
        },
        "team": {
            "abcde": "Member" // User IDs
        },
        "permissions": {
            "abcde": "1" // 64-bit permission bitfield, 1 being Project Administrator
        },
        "submissions": [
            "abcde" // Submission ID
        ]
    },
    "platform": {
        // Because `type` can be an arbitrary string, clients are required to fail safe when an unexpected value is encountered.
        "type": "modrinth", // modrinth or download_url
        // type: modrinth
        "project_id": "aBCjdxoap", // Modrinth ID
        "version_id": "aBCjdxoap", // Modrinth Version ID
        // "type": "download_url"
        "download_url": "https://example.com/mod.jar"
    }
}

Endpoints

Base: https://api.modgarden.net/v2

GET Project by ID

/projects/{project_id}

GET Project by mod ID

/projects/{mod_id}?by=mod_id

GET Submission by ID

/submissions/{submission_id}

GET Submission by mod ID

/submissions/{mod_id}?by=mod_id
Example: /submissions/spud_slingers?by=mod_id

POST Create Project (Auth)

/projects

POST Create Submission in Project (Auth)

/submissions

{
    "project_id": "abcde",
    "theme_id": "abcde",
    "platform": {
          // "type": "modrinth"
          "project_id": "aBCjdxoap", // Modrinth ID
          "version_id": "aBCjdxoap", // Modrinth Version ID
          // "type": "download_url"
          "download_url": "https://example.com/mod.jar"
    }
}

Response Headers

Location: */submissions/{submission_id}

POST Transfer Submission to Project (Auth)

/submissions/{submission_id}/transfer/{project_id}

DELETE Delete Submission (Auth)

/submissions/{submission_id}

DELETE Delete Project (Auth)

/projects/{project_id}

GET Team Members

/projects/{project_id}/members

{
  "abcde": "Member",
  "mgacc": "" // No role name
}

PATCH Modify Team Members (Auth)

/projects/{project_id}/members

{
  "abcde": "Member",
  "mgacc": "", // No role name
  "grbot": null // Removes a member
}

PATCH Set Team Member Permissions (Auth)

/projects/{project_id}/permissions

{
  "abcde": "1"
}

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions