{"id":28256709,"url":"https://github.com/isaacschemm/deviantartfs","last_synced_at":"2026-04-26T22:31:13.403Z","repository":{"id":50779891,"uuid":"162750160","full_name":"IsaacSchemm/DeviantArtFs","owner":"IsaacSchemm","description":"F# library for the DeviantArt and Sta.sh API","archived":false,"fork":false,"pushed_at":"2024-10-28T02:33:01.000Z","size":1111,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-19T23:13:48.205Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"F#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IsaacSchemm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-21T19:21:01.000Z","updated_at":"2024-10-28T02:33:06.000Z","dependencies_parsed_at":"2024-06-20T03:41:42.870Z","dependency_job_id":"2ace496c-f3d7-49f2-b7d3-05977fa9a769","html_url":"https://github.com/IsaacSchemm/DeviantArtFs","commit_stats":null,"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/IsaacSchemm/DeviantArtFs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IsaacSchemm%2FDeviantArtFs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IsaacSchemm%2FDeviantArtFs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IsaacSchemm%2FDeviantArtFs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IsaacSchemm%2FDeviantArtFs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IsaacSchemm","download_url":"https://codeload.github.com/IsaacSchemm/DeviantArtFs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IsaacSchemm%2FDeviantArtFs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260358529,"owners_count":22997059,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-19T23:13:38.442Z","updated_at":"2026-04-26T22:31:13.395Z","avatar_url":"https://github.com/IsaacSchemm.png","language":"F#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DeviantArtFs\n\nA .NET / F# library to interact with the [DeviantArt / Sta.sh API.](https://www.deviantart.com/developers/http/v1/20200519)\n\n## Design\n\nEach request that can be made to DeviantArt is represented by a function\nin one of the modules (static classes) in the `DeviantArtFs.Api` namespace.\nEach static method takes an `IDeviantArtAccessToken` as its first parameter.\nMost methods have additional parameters, many of which are discriminated\nunions; hopefully this makes it easy to see exactly what your code is doing\nand ensures that parameters can't get mixed up.\n\nIn some cases, two methods are available for an API call. Functions whose\nnames begin with `Page` will return a single page of results, while the\ncorresponding `Get` function will return an asynchronous sequence which\nbegins at the offset you specify (see \"Interoperability\" below). Be careful\nnot to request too much data or you might hit API usage limits.\n\n## Interoperability\n\nThe response objects in this library are F# records using F# `option` types to\nrepresent missing fields.\nYou can interact with `option` types from C# / VB.NET using `FSharpOption\u003cT\u003e`\nand `OptionModule`, or you can use the provided extension methods (see below)\nwhen working with these values.\n\nThe following types are used in response objects:\n\n* `FSharpOption\u003cT\u003e`: Used to represent fields that may be missing or null on\n  the response object. Extension methods (see below) allow C# and VB.NET users\n  to extract these values by converting `None` to `null` or to an empty list.\n* `FSharpList\u003cT\u003e`: An immutable linked list. Implements `IReadOnlyList\u003cT\u003e` and\n  `IEnumerable\u003cT\u003e`.\n\nThe following extension methods are provided in the namespace `DeviantArtFs.Extensions`:\n\n* `.OrNull()`: converts an option type to an equivalent nullable type\n* `.IsTrue()`: checks whether a `bool option` type (which might be `true`, `false`, or `None`) is true\n* `.IsFalse()`: checks whether a `bool option` type (which might be `true`, `false`, or `None`) is false\n* `.OrEmpty()`: returns the items in `IEnumerable\u003cT\u003e option`, or an empty list if the field is `None`\n\n### Optional parameters\n\nOptional parameters for object expansion, `ext_params`, and mature content\nfiltering must be included through the token object. Use the interface\n`IDeviantArtAccessTokenWithOptionalParameters` and include the optional\nparameters in the `OptionalParameters` property; for example:\n\n    member _.OptionalParameters = [\n        OptionalParameter.Expansion [Expansion.UserProfile]\n        OptionalParameter.ExtParam ExtParam.Collection\n        OptionalParameter.MatureContent true\n    ]\n\nor:\n\n    public IEnumerable\u003cOptionalParameter\u003e OptionalParameters =\u003e new OptionalParameter[] {\n        OptionalParameter.NewExpansion(Expansion.UserProfile),\n        OptionalParameter.NewExtParam(ExtParam.Gallery),\n        OptionalParameter.NewMatureContent(true)\n    }\n\n### Deleted deviations and status updates\n\n`Deviation` and `DeviantArtStatus` objects can represent a deviation or status\nupdate that has been deleted; this is why most of the fields on those two\ntypes are marked optional. Check the `is_deleted` field before attempting to\naccess any of the other fields.\n\n## Known issues\n\n* The `profile_pic` field in the `user.profile` expansion is not supported due to circular type definitions. Get it from the full profile object instead.\n* The `tier.stats` field is not supported due to serialization issues on DeviantArt's end (the empty object `{}` can be rendered as `[]` by the server).\n* The `api_session` return object is not supported.\n\n## Examples\n\n* **ExampleConsoleApp**: An F# console application that shows some data on the\n  current user's recent (and not-so-recent) submissions, along with some of\n  their Sta.sh info. Reads the access token interactively from standard input.\n* **ExampleConsoleApp3**: An F# console application that submits a picture to\n  Sta.sh and then publishes it to DeviantArt.\n* **GalleryViewer**: A VB.NET app that lets you see the \"All\" view of\n  someone's gallery and read the descriptions of individual submissions.\n  Uses the Client Credentials grant and stores tokens in a file.\n* **WebApp**: An ASP.NET Core app written in C# that lets you view\n  someone's gallery folders and corresponding submission thumbnails.\n  Uses the Client Credentials grant and stores tokens in a database.\n\n## Authentication\n\nSee also: https://www.deviantart.com/developers/authentication\n\nThe DeviantArtAuth module provides methods to support the Authorization Code\ngrant type (getting tokens from an authorization code and refreshing tokens).\n\nIf you are writing a Windows desktop application, the package\nDeviantArtFs.WinForms package uses Internet Explorer to provide a way to get a\ncode or token from the user.\n\nIf you need to store the access token somewhere (such as in a database or\nfile), you may want to create your own class that implements the\n`IDeviantArtAccessToken` or `IDeviantArtRefreshableAccessToken` interface.\nUsing the latter will allow DeviantArtFs to automatically refresh the token\nand store the new value when it recieves an HTTP 401 response.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisaacschemm%2Fdeviantartfs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fisaacschemm%2Fdeviantartfs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisaacschemm%2Fdeviantartfs/lists"}